Сейчас я изучаю MySQL. И я хочу узнать больше о OUTER JOIN с подзапросами. Поэтому это означает, что я не хочу использовать CASE и IF
Итак, теперь у меня есть две таблицы, которые выглядят так.
таблица customer
с c_id и c_name, таблица order
с order_id, c_id, order_type. Для order_type есть только три типа: 'a', 'b', 'c'
Теперь я хочу сделать сводку, которая показывает детали заказа для клиента.
Таблица должна выглядеть так:
c_name a b c
person1 1 0 2
person2 0 1 2
person3 0 0 0
Это то, что я до сих пор
SELECT c.c_id, COUNT(A), COUNT(B) , COUNT(C)
FROM customer as c
LEFT OUTER JOIN (
SELECT c_id, order_type as A FROM order
WHERE order_type = 'a')
AS first
ON first.c_id = c.c_id
LEFT OUTER JOIN (
SELECT c_id, order_type as B FROM order
WHERE order_type = 'b')
AS second
ON second.c_id = c.c_id
LEFT OUTER JOIN (
SELECT c_id, order_type as C FROM order
WHERE order_type = 'c')
AS third
ON third.c_id = c.c_id
group by c_name
Вы ищете сводный запрос здесь:
SELECT
c.c_name,
SUM(CASE WHEN o.order_type = 'a' THEN 1 ELSE 0 END) AS a,
SUM(CASE WHEN o.order_type = 'b' THEN 1 ELSE 0 END) AS b,
SUM(CASE WHEN o.order_type = 'c' THEN 1 ELSE 0 END) AS c
FROM customer c
LEFT JOIN order o
ON c.c_id = o.c_id
GROUP BY
c.c_id;
Идея здесь состоит в том, чтобы объединить ваши две таблицы вместе, а затем агрегировать по клиенту, генерируя итоговые значения для каждого типа заказа, используя выражения CASE
.