Проблем:
Искате да групирате данните си по две колони, за да можете да преброите някои статистически данни.
Пример:
В order таблица, имате колоните order_date , product_id , customer_id и number . Искате да преброите броя продукти, закупени от всеки клиент всеки ден.
order таблицата изглежда така:
| order_date | product_id | customer_id | номер |
|---|---|---|---|
| 25.11.2020 | 7 | 1 | 1 |
| 25.11.2020 | 12 | 1 | 3 |
| 26.11.2020 | 53 | 1 | 2 |
| 26.11.2020 | 1 | 2 | 4 |
| 26.11.2020 | 3 | 2 | 1 |
| 26.11.2020 | 16 | 2 | 7 |
| 26.11.2020 | 3 | 3 | 2 |
| 27.11.2020 | 6 | 3 | 1 |
Решение:
SELECT order_date, customer_id, SUM(number) AS products_number FROM order
Резултатът е:
| order_date | customer_id | номер_продукти |
|---|---|---|
| 26.11.2020 | 3 | 2 |
| 27.11.2020 | 3 | 1 |
| 26.11.2020 | 2 | 12 |
| 25.11.2020 | 1 | 4 |
| 26.11.2020 | 1 | 2 |
Дискусия:
За да групирате по две колони, просто използвайте GROUP BY с две колони. Имената на колоните трябва да бъдат изброени след GROUP BY ключова дума и разделени със запетая. Групите ще бъдат създадени въз основа на стойностите на двете колони; за всяка двойка стойности се създава отделна група (напр. ('2020-11-25', 1) ). Вижте таблицата по-долу, където всяка група е представена в различен цвят:
| order_date | customer_id | product_id | номер |
|---|---|---|---|
| 25.11.2020 | 1 | 7 | 1 |
| 25.11.2020 | 1 | 12 | 3 |
| 26.11.2020 | 1 | 53 | 2 |
| 26.11.2020 | 2 | 1 | 4 |
| 26.11.2020 | 2 | 3 | 1 |
| 26.11.2020 | 2 | 16 | 7 |
| 26.11.2020 | 3 | 3 | 2 |
| 27.11.2020 | 3 | 6 | 1 |
Ако едната или двете колони имат NULLs стойности, тези стойности се третират като отделна група (напр. ('2020-11-26', NULL) , (NULL, 5) или (NULL, NULL) ).
От друга страна, ако има NULLs в колона, върху която прилагаме агрегатна функция, NULLs стойностите просто се пропускат. (В този пример агрегатната функция е SUM() и колоната е number ). Ако имахме числовите стойности 2 , 1 и NULL за една от групите, SUM(number) би било равно на 3 (2 и 1 се добавят заедно и NULLs е пропуснато.)
По същия начин можете да групирате по произволен брой колони – просто напишете имената на колоните в GROUP BY клауза и ги отделяйте със запетаи.