Возможно ли GROUP BYболее одного столбца в SELECTзапросе MySQL ? Например:
GROUP BY fV.tier_id AND 'f.form_template_id'
Возможно ли GROUP BYболее одного столбца в SELECTзапросе MySQL ? Например:
GROUP BY fV.tier_id AND 'f.form_template_id'
Ответы:
GROUP BY col1, col2, col3
Да, вы можете группировать по нескольким столбцам. Например,
SELECT * FROM table
GROUP BY col1, col2
Результаты сначала будут сгруппированы по col1, а затем по col2. В MySQL предпочтение столбца идет слева направо.
GROUP BYприменяется col1+col2. например, col1 = 1, 2, 1, 2 | col2 = 1, 2, 3, 2и бег GROUP BY col1,col2вернется 1,1|1,3|2,2в отличие от 1,1|2,2предложенного. Принимая во внимание, GROUP BY col2, col1что изменил бы возрастающий порядок возвращения col2. 1,1|2,2|1,3 Демонстрация: sqlfiddle.com/#!9/d5f69/1 Обратите внимание, что идентификатор строки: 2 возвращается в обоих случаях, 2,2несмотря на инвертирование столбцов.
GROUP BY). И если в первом определенном столбце есть равные результаты, то только в пределах одинаковых результатов сортируется по второму определенному столбцу
SUMиспользования с GROUP BY. Если GROUP BYтолько по одному столбцу, то SUMвсе значения каждого отдельного (различного) значения столбца sqlfiddle.com/#!9/1cbde2/2 . Если GROUP BYдва столбца. Затем mysql сначала проверяет, есть ли для первого значения столбца разные значения во втором столбце. Если да, то mysql SUMкаждое другое значение второго столбца sqlfiddle.com/#!9/1cbde2/1 .
Да, но что означает группировка по двум столбцам? Ну, это то же самое, что группировка по каждой уникальной паре в ряду. Порядок перечисления столбцов изменяет способ сортировки строк.
В вашем примере вы бы написали
GROUP BY fV.tier_id, f.form_template_id
Между тем код
GROUP BY f.form_template_id, fV.tier_id
даст аналогичные результаты, но отсортированы по-разному.
Чтобы использовать простой пример, у меня был счетчик, который должен был суммировать уникальные IP-адреса для каждой посещенной страницы на сайте. Который в основном группируется по pagename, а затем по IP. Я решил это с помощью комбинации DISTINCT и GROUP BY.
SELECT pagename, COUNT(DISTINCT ipaddress) AS visit_count FROM log_visitors GROUP BY pagename ORDER BY visit_count DESC;
Если вы предпочитаете (мне нужно применить это) группу по двум столбцам одновременно, я только что увидел этот момент:
SELECT CONCAT (col1, '_', col2) AS Group1 ... GROUP BY Group1
SELECT CONCAT(col1, '_', col2) FROM GROUP BY col1, col2. Результаты обычно выглядят так же, как этот ответ, но внутреннее исполнение совсем другое.
GROUP BY CONCAT(col1, '_', col2)
GROUP BY col1, col2. Это даст неправильные результаты с некоторыми данными. Скажем, col1, col2есть значения: ('a_b', 'c')в одном ряду и ('a', 'b_c')в другом. Это неправильный ответ, когда GROUP BY CONCAT объединит две строки в одну. Правильного ответа не будет.
SELECT CONCAT(col1, '_', col2) ... FROM ... GROUP BY col1, col2 ;