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

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

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
运行
AI代码解释
复制
    WHEN e.schedule ='None' AND e.created_at > '2014-02-01 00:00:00 +0000' THEN SUM(e.amount)

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

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-25 18:03:17

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

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

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

复制
相关文章
Mysql中的条件语句if、case
Mysql中的条件语句在我们对数据进行转换的时候比较有用,这样就不需要创建中转表。
大江小浪
2018/07/24
6.5K0
mysql数据库中 case when语句使用
在mysql数据库中,有时候我们会使用到类似if else的判断操作。那么mysql中怎么处理这种需求呢?
凯哥Java
2019/07/01
2.9K0
mysql数据库中 case when语句使用
在mysql数据库中,有时候我们会使用到类似if else的判断操作。那么mysql中怎么处理这种需求呢?
凯哥Java
2022/12/15
2.1K0
mysql数据库中 case when语句使用
shell脚本中的case条件语句介绍和使用案例
#前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句。case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,case看起来更规范和易读
老油条IT记
2020/04/08
6.2K0
shell脚本中的case条件语句介绍和使用案例
Mysql的 If和 Case语句
比如在上例子中,我们存储了一些不希望暴露性别的用户,存储的值为3.此时想要查询可以:
呼延十
2019/06/26
3.5K0
Mysql的 If和 Case语句
(33)if、case语句
②[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
生信real
2020/09/10
1.2K0
(7)case语句[通俗易懂]
总结:把安装php的各种版本一个文件,文件里面是函数安装php各种版本的函数,然后在入口文件使用. /server/scripts/php.sh加载这个文件,在定义函数调用文件中的函数功能即可
全栈程序员站长
2022/09/20
9740
(7)case语句[通俗易懂]
MySQL中CASE的使用
语法说明: 方式一: CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result …] [ELSE result] END 方式二:
全栈程序员站长
2022/07/14
2.1K0
使用case语句编写系统服务脚本
case语句可以很好的代替if语句中的多分支结构,使用case分支语句时,有几个值得注意的特点如下所述:
小手冰凉
2019/09/10
1.1K0
使用case语句编写系统服务脚本
SystemVerilog-决策语句-case语句
经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式和运算符。
碎碎思
2022/11/14
3.7K0
SystemVerilog-决策语句-case语句
CASE语句与CASE表达式
case语句与case表达式是plsql流程控制的重要组成部分,尽管其使用方法较为简单,但容易混淆。本文将描述case语句与case表达式并给出演示以便于更好理解两者的异同及使用时的注意事项。 一、简单case语句
Leshami
2018/08/14
1.3K0
SQLite在NDK中的重生
这个问题的起因是,某项目需要在 NDK 中使用 SQLite,并且这个库同时也需要在 iOS 端使用。一开始的开发均很顺利,已有文章予以总结,点击查看该文章(http://rarnu.com/index.php/2017/03/17/sqlite_cross_platform/)。 但是当程序运行到 Android N 上时,情况就不对了,整个程序直接崩溃,报的错误是 Can not load dynamic library "libsqlite.so"。保险起见,我检查了一下 /syste
用户1907613
2018/07/20
1.5K0
带case操作的update语句_多个case when嵌套
1、场景:由于多次循环执行数据库操作是非常耗费性能的。因此,我们需要尽可能一条UPDATE语句更新多条数据。
全栈程序员站长
2022/10/04
2.7K0
SQL中的CASE WHEN使用
SQL中的CASE WHEN使用 Case具有两种格式。简单Case函数和Case搜索函数。 –简单Case函数 CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END –Case搜索函数(WHEN 后还可以用 AND ,OR ) CASE WHEN sex = ‘1’ THEN ‘男’ WHEN sex = ‘2’ THEN ‘女’ ELSE ‘其他’ END
javascript.shop
2019/09/04
2.3K0
SQLite使用CREATE TABLE 语句创建表
SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类型。
用户9236362
2021/11/29
3.5K0
Java switch case语句
swith 语句主要用于判断一个变量与一系列值中某个值是否相等,每一个值称为一个分支。基本格式如下:
算法与编程之美
2022/10/28
1.4K0
Java switch case语句
mysql 分组统计 case when 及 if 语句使用
需求: 同时:中文名重复了就是1部剧,不重复就是多部剧 需求分析: 这个需要分组、需要统计、需要判断、需要distinct。 分组:根据地区、类别、中文名称分类; 判断:根据类型进行判断同时要求和 因为中文名称重复的就是1部,所以统计的时候,要使用到distinct去重。 表语句: DROP TABLE IF EXISTS `yj_item_plan`; CREATE TABLE `yj_item_plan` (   `id` bigint(20) NOT NULL AUTO_INCREMENT,  
凯哥Java
2022/12/16
2.5K0
mysql 分组统计 case when 及 if 语句使用
java switch case 语句
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
taoli
2022/09/30
1.5K0
java switch case 语句
Mysql 中 Case 的使用介绍
工作中经常需要写各种 sql 来统计线上的各种业务数据,使用 CASE 能让你的统计事半功倍,如果能用好它,不仅SQL 能解决的问题更广泛,写法也会漂亮地多,接下来让我们看看 CASE 的各种妙用吧,在开始之前我们简单学习一下 CASE 表达式的写法
kunge
2019/12/22
1.2K0
SQLite 使用语句分离数据库
SQLite 的 DETACH DATABASE 语句是用来把命名数据库从一个数据库连接分离和游离出来,连接是之前使用 ATTACH 语句附加的。如果同一个数据库文件已经被附加上多个别名,DETACH 命令将只断开给定名称的连接,而其余的仍然有效。您无法分离 main 或 temp 数据库。
用户1685462
2021/08/30
3830

相似问题

SQLite中的Case语句给出了错误的结果

10

SQLite查询中的CASE语句

20

SQLite:在CASE语句中使用合并

13

SQLite to TSQL - Case语句

11

SQLite CASE/WHEN语句

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文