Проблем:
Искате да групирате данните си по две колони, за да можете да преброите някои статистически данни.
Пример:
В 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
клауза и ги отделяйте със запетаи.