Чи можливо для запиту GROUP BY
MySQL більше одного стовпця SELECT
? Наприклад:
GROUP BY fV.tier_id AND 'f.form_template_id'
Чи можливо для запиту GROUP BY
MySQL більше одного стовпця SELECT
? Наприклад:
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
s всі значення кожного окремого (різного) значення стовпця 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-адрес на відвідуваній сторінці на сайті. Що в основному групується за назвою сторінки, а потім за 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 ;