MYSQL СУММА (ЕСЛИ) с группой по ИМЯ, но некоторые ИМЯ хотят получить - PullRequest
2 голосов
/ 10 марта 2020

У меня есть один вопрос в SQL.

Это запрос.

SELECT Customer,
        SUM(IF(date_format(OutputDate, '%Y') = 2020 AND date_format(OutputDate, '%m') = 3, SupplyPrice, 0)) AS March
    FROM (SELECT Customer, OutputDate, SupplyPrice FROM `TableOutput`) AS C
    GROUP BY Customer
    ORDER BY March DESC
  LIMIT 20;

он дает результат ниже:

Customer       March
A              100
B              200
C              300
D              400
...

но я хочу сделать так, чтобы A и B суммировались вместе в качестве A (не B) или нового имени (например, Z) * ​​1009 *

следующим образом:

Customer       March
A(or Z)        300
C              300
D              400
...

Я хочу изменить запрос и вывести его.

1 Ответ

3 голосов
/ 10 марта 2020

Я понимаю, что вы хотите сгруппировать клиентов A и B. Вы можете сделать это с помощью выражения CASE:

SELECT 
    (CASE WHEN customer IN ('A', 'B') THEN 'A' ELSE Customer
     END) as real_customer,
    SUM(CASE WHEN outputDate >= '2020-03-01' AND outputDate < '2020-04-01' THEN SupplyPrice ELSE 0 END) AS March
FROM `TableOutput`
GROUP BY real_customer
ORDER BY March DESC
LIMIT 20;

Обратите внимание, что я изменил предикат даты на outputDate, поэтому он использует сравнения с датерами, а не функции даты; это более эффективный подход, который может использовать преимущества существующего индекса.

...