在sqlite中使用Case语句,无法获得我正在寻找的结果

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 语句的记录,它会将所有记录与特定记录相加!

样本输出

请你能帮我重写案例,以便我得到我正在寻找的结果。

Gor*_*off 5

查询的一个问题是您e.scheduleselect列表中使用,但它不在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子句,以便为每个类别中的每个时间表单独一行。