СУММА (СЛУЧАЙ, КОГДА A = B ТОЛЬКО СЧЕТ * X) - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь выполнить запрос в SQLite3, где я хочу получить общий итог столбца Savings из оператора Case. Мой запрос SQL выглядит следующим образом:

SELECT COUNT(PhoneNumber), Dept, Device
    CASE
    WHEN Device='Apple' THEN 500*COUNT(PhoneNumber)
    WHEN Device='Samsung' THEN 400*COUNT(PhoneNumber)
    ELSE 100*COUNT(PhoneNumber)
    END AS 'Savings'
FROM TestTable
WHERE Active= 'No' OR Cancel=1
GROUP BY Dept, Device

Я пытался вставить SUM () перед оператором CASE, но получаю ошибку "Результат: неправильное использование агрегатной функции count () В строке 1: «Кто-нибудь может подсказать мне, как построить этот запрос?

1 Ответ

0 голосов
/ 08 апреля 2020

Этот запрос мне подходит. Вы группируете по устройству (и отделу) и подсчитываете номера телефонов. Затем, если ваша сгруппированная строка находится на Apple, вы отображаете количество, умноженное на 500; когда это строка группы Samsung, вы показываете, что показываете ее умноженную на 400; а еще умножить на сто.

Возможно, у СУБД есть проблемы с тем, чтобы увидеть, что она может сначала агрегировать, а затем оценить CASE WHEN. Вот альтернативный способ написать то же самое. Пожалуйста, попробуйте, чтобы увидеть, работает ли это.

SELECT Dept, Device,
  SUM(
    CASE WHEN PhoneNumber IS NOT NULL AND Device = 'Apple' THEN 500
         WHEN PhoneNumber IS NOT NULL AND Device = 'Samsung' THEN 400
         WHEN PhoneNumber IS NOT NULL THEN 100
         ELSE 0
    END
  ) AS Savings
FROM TestTable
WHERE Active = 'No' OR Cancel = 1
GROUP BY Dept, Device
ORDER BY Dept, Device;
...