MySQL Выбрать разные данные в одной строке в один и тот же запрос

0

Сейчас я изучаю 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
Теги:

1 ответ

1
Лучший ответ

Вы ищете сводный запрос здесь:

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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню