首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在sqlite中使用Case语句,很难得到我想要的结果

在sqlite中使用Case语句,很难得到我想要的结果
EN

Stack Overflow用户
提问于 2014-02-26 01:04:50
回答 1查看 5.8K关注 0票数 2

我在SQL查询方面遇到了困难。我在用sqlite。

我有一张桌子expenses。我试图使用CASE语句来选择和求和值。以下是一些样本数据:

这是一个没有得到我想要的.

代码语言:javascript
代码运行次数:0
运行
复制
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

下面是查询返回的图片。

我希望看到Housing 420的总价值,这是因为有三条带有category“住房”的记录,其中一条的schedule为"None“(record 2),创建于1月份。另外两个(记录10和16)的schedule为每月。在我的CASE中,我只尝试选择created_at大于2月1日的计划:

代码语言:javascript
代码运行次数:0
运行
复制
    WHEN e.schedule ='None' AND e.created_at > '2014-02-01 00:00:00 +0000' THEN SUM(e.amount)

或具有"None“以外的附表值,在本例中:

代码语言:javascript
代码运行次数:0
运行
复制
    WHEN e.schedule = 'Monthly' THEN SUM(e.amount) 

不幸的是,我得到的结果是495 (300 + 120 + 75)。如果它找到一条符合case语句的记录,那么它就是用一个特定的category对所有记录进行求和!

请你帮我改写一下箱子,这样我就能得到我想要的结果了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-26 02:03:17

查询的一个问题是,您正在select列表中使用select,但它不在group by中。这通常是问题的征兆。

我认为您想要将整个case语句移动到sum()

代码语言:javascript
代码运行次数:0
运行
复制
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;

否则,您可能希望将e.schedule移到group by子句中,以便为每个类别中的每个计划有一个单独的行。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22029603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档