LpL*_*ich 0 sql sqlite select sum case
我在使用 SQL 查询时遇到困难。我正在使用sqlite。
我有一张桌子expenses。我正在尝试使用CASE语句来选择和求和值。以下是一些示例数据:

这是没有得到我想要的查询...
SELECT e.category,
CASE
WHEN e.schedule ='None' AND e.created_at > '2014-02-01 00:00:00 +0000' THEN SUM(e.amount)
WHEN e.schedule = 'Daily' THEN SUM(e.amount)*28.000000
WHEN e.schedule = 'Mon - Fri' THEN SUM(e.amount)*20
WHEN e.schedule = 'Weekly' THEN SUM(e.amount)*4.000000
WHEN e.schedule = 'Every 4 Weeks' THEN SUM(e.amount)*1.083333333333
WHEN e.schedule = 'Monthly' THEN SUM(e.amount)*1
ELSE 0
END
AS totalValue FROM expenses e GROUP BY e.category ORDER BY e.category
Run Code Online (Sandbox Code Playgroud)
下面是查询返回的图片。
我想看到Housing420 的总价值,这是因为有三条记录带有category“住房”,其中一条schedule记录为“无”(记录 ID 2)并且是在 1 月份创建的。另外两个(记录 10 和 16)有一个scheduleMonthly。在我的CASE我尝试只选择created_at大于 2 月 1 日的时间表:
WHEN e.schedule ='None' AND e.created_at > '2014-02-01 00:00:00 +0000' THEN SUM(e.amount)
Run Code Online (Sandbox Code Playgroud)
或者使用除“无”以外的计划值,在这种情况下:
WHEN e.schedule = 'Monthly' THEN SUM(e.amount)
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到了 495 (300 + 120 + 75) 的结果。category如果找到符合 case 语句的记录,它会将所有记录与特定记录相加!

请你能帮我重写案例,以便我得到我正在寻找的结果。
查询的一个问题是您e.schedule在select列表中使用,但它不在group by. 这通常是问题的征兆。
我认为您想将整个case语句移动到sum():
SELECT e.category,
SUM(CASE WHEN e.schedule ='None' AND e.created_at > '2014-02-01 00:00:00 +0000' THEN e.amount
WHEN e.schedule = 'Daily' THEN e.amount*28.000000
WHEN e.schedule = 'Mon - Fri' THEN e.amount*20
WHEN e.schedule = 'Weekly' THEN e.amount*4.000000
WHEN e.schedule = 'Every 4 Weeks' THEN e.amount*1.083333333333
WHEN e.schedule = 'Monthly' THEN e.amount*1
ELSE 0
END) as totalValue
FROM expenses e
GROUP BY e.category
ORDER BY e.category;
Run Code Online (Sandbox Code Playgroud)
否则,您可能希望移动e.schedule到该group by子句,以便为每个类别中的每个时间表单独一行。
| 归档时间: |
|
| 查看次数: |
4932 次 |
| 最近记录: |