0

我正在尝试在 SQLite3 中运行一个查询,其中我想要 Case 语句中的 Savings 列的总计。我的 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

我尝试在 CASE 语句前面插入 SUM(),但出现错误“结果:在第 1 行滥用聚合函数 count():”有人可以指导我如何构建此查询吗?

4

1 回答 1

0

这个查询对我来说似乎有效。您按设备(和部门)分组并计算电话号码。然后,如果您的分组行在 Apple 上,则显示计数乘以 500;当它是三星组行时,你显示你显示它乘以 400;否则乘以百。

也许 DBMS 有问题看到它可以先聚合然后评估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;
于 2020-04-08T05:33:00.913 回答