GROUP BY по нескольким выражениям

В GROUP BY можно добавлять несколько выражений через запятую. В таком случае в результат попадут все уникальные комбинации этих выражений.

Рассмотрим заказы в разрезе магазинов и категорий товаров:

SELECT p.store_id,
       pr.category_id,
       pi.product_id,
       pi.count,
       pi.price
  FROM purchase p
  JOIN purchase_item pi
    ON pi.purchase_id = p.purchase_id
  JOIN product pr
    ON pr.product_id = pi.product_id
 ORDER BY p.store_id,
          pr.category_id
store_id category_id product_id count price
100 6 3 1 26100.00
100 6 3 1 26100.00
201 5 12 1 100000.00
201 6 4 1 21500.00
301 10 7 1 4900.00
302 8 8 3 38300.00
302 8 8 1 38300.00
302 8 9 1 44500.00

Теперь по каждой категории товаров вычислим сумму всех заказов по магазинам:

SELECT p.store_id,
       pr.category_id,
       sum(pi.count * pi.price) as total_price
  FROM purchase p
  JOIN purchase_item pi
    ON pi.purchase_id = p.purchase_id
  JOIN product pr
    ON pr.product_id = pi.product_id
 GROUP BY p.store_id, pr.category_id
 ORDER BY p.store_id,
          pr.category_id
store_id category_id total_price
100 6 52200.00
201 5 100000.00
201 6 21500.00
301 10 4900.00
302 8 197700.00

Обрати внимание, что для магазина 201 две записи - для категорий 5 и 6.

4.7 GROUP BY и WHERE

4.9 NULL значения в GROUP BY