精选文章 sql语句-根据不同状态分组查询不同字段总和

sql语句-根据不同状态分组查询不同字段总和

作者:Qyq0498 时间: 2021-02-05 09:43:14
Qyq0498 2021-02-05 09:43:14
【摘要】首先展示一下我需要处理的表~ 
我首先想到的是根据freeze_status的不同状态分组查询,分别得到两种状态写的冻结积分(integral_frozen)总和,然后再通过union 连接两个不同的查询语句,sql语句如下: 
select user_id, SUM(integral_frozen),freeze_status from ws_user_account where free...

首先展示一下我需要处理的表~

sql语句-根据不同状态分组查询不同字段总和1我首先想到的是根据freeze_status的不同状态分组查询,分别得到两种状态写的冻结积分(integral_frozen)总和,然后再通过union 连接两个不同的查询语句,sql语句如下:

select user_id, SUM(integral_frozen),freeze_status from ws_user_account where freeze_status=0  GROUP BY user_id
UNION ALL
select user_id, SUM(integral_frozen),freeze_status from ws_user_account where freeze_status=1  GROUP BY user_id 

通过UNION 可以查到我想要的数据即查询freeze_status为不同状态下不同用户积分冻结以及解冻情况,但是,由于我要在页面进行显示,所以同一个用户的freeze_status为不同状态下的积分总和【即SUM(integral_frozen)】应该分别展示在同一条记录里面,故而下面的结果肯定是不可取的。

sql语句-根据不同状态分组查询不同字段总和2

通过使用distinct去重相同的user_id,然后分别查出冻结金额总和【即freeze_status=1时SUM(integral_frozen)】和解冻金额总和【即freeze_status=0时SUM(integral_frozen)】字段内容,对应的对上面的sql语句改造之后,我的sql已经进化成这样啦~~

select DISTINCT wua.user_id,
(select SUM(integral_frozen) freeze1 from ws_user_account where freeze_status=1 and user_id = wua.user_id GROUP BY user_id) freeze1,
(select SUM(integral_frozen) freeze0 from ws_user_account where freeze_status=0 and user_id = wua.user_id GROUP BY user_id) freeze0
from ws_user_account wua

结果如下,freeze1代表冻结金额,freeze0代表解冻金额:

sql语句-根据不同状态分组查询不同字段总和3

 

 

 

嗯,基本满足我的需求~~。不过这才第一个问题,接下来,我需要有一个提成积分(即freeze1和freeze0的和),从上图可知,user_id为5时对应的freeze1是空的,如果直接通过(freeze1+freeze2)计算会有问题,目前通过mysql中的三元运算解决的。。

select DISTINCT temp.user_id, temp.freeze1, temp.freeze0, (if(isnull(temp.freeze1), 0, temp.freeze1)+if(isnull(temp.freeze0), 0,temp.freeze0)) as 当条记录的和 from ws_user_account a RIGHT JOIN(
select wua.user_id,
(select SUM(integral_frozen) freeze1 from ws_user_account where freeze_status=1 and user_id = wua.user_id GROUP BY user_id) freeze1,
(select SUM(integral_frozen) freeze0 from ws_user_account where freeze_status=0 and user_id = wua.user_id GROUP BY user_id) freeze0
from ws_user_account wua
)temp on temp.user_id = a.user_id

结果如下:

sql语句-根据不同状态分组查询不同字段总和4

 

 

附:mysql中的if函数,if(expr1,expr2,expr3),如果expr1为true,则if()的返回值为expr2,否则返回值为expr3

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:JDK 的不同版本的切换

下一篇:CRM管理策略为什么能增加企业利润?

您可能感兴趣

  • 从ACCESS转到学习SQL SERVER所遇到的几个问题

    提问:因为刚刚从ACCESS转到学习SQL SERVER,在这里请教各位朋友两个问题:          1.在ACCESS中所使用的'自动编号'字段,在SQL SERVER中,应该使用什么字段,如果没            有这样的字段,应该用怎样的办法实现呢?          2.在ACCESS中,对DATE设置了默认值'NOW()',在SQL SERVER中又应该这样设置呢?    ...

  • 用ADO管理SQL Server数据库及其设备

    微 软 公 司 的SQL Server 是 目 前 小 型 网 络 中 常 用 的 数 据 库 管 理 系 统 之 一。 面 向 这 种 网 络 数 据 库 的 应 用 程 序 也 在 日 益 增 多, 这 种 网 络 数 据 库 应 用 系 统 的 正 常 运 行, 一 般 都 依 赖 于 已 经 存 在 的 用 户 数 据 库。 创 建 数 据 库 的 工 作 当 然 可 以 用SQL ...

  • SQL Server存储过程编程经验技巧

    SQL Server存储过程编程经验技巧作者:苏红超 文章来源:http://home.kzinfo.net/getc/200104/0406008.htm   MS SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 MS SQL Server2000的推出,微软的这种数据库服务系统真正的实现了在WindowsNT/200 ...

  • 如何在数据库表中建立复合主键(即多个字段同时作为主键)

    主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说主键在一张表中的记录值是唯一的。     建立主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立,下面分别介绍。       1.在数据库提供的GUI环境中建立(以SQL7为例)。     输入表信息后按Ctrl键同时选中多行,然后点上面的主键按钮就行了。     2.通过SQL语...

  • 如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息

    如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息 湖南省邮电五二六厂 肖天鹏 ---- 利用 VC++ 的 AppWizard,可以很容易地实现工具条和菜单项的 ToolTip 或在状态条上显 示帮助信息,但要在对话框的控件上显示 ToolTip 并在状态条上显示控件信息并不是那么容易, 其实,利用 VC++ 中的 WM_SETCURSOR 与 TTN_N...

  • 用Delphi实现子目录级的文件查询

    用Delphi实现子目录级的文件查询   在应用实践中,我们经常会用到文件查询功能。通过Win95中提供的查找功能,我们可以方便的找出磁盘上任何子目录下的文件,其原因是该查找功能可以遍历指定目录下的所有子目录中的文件。从编程角度讲,它实现了子目录级的文件查询。其实,这项功能并不难实现,关键是能理解并掌握懙莨閽这种程序设计思路。本人用Delphi实现了该项功能(任意子目录级),由于使用了懙莨...

  • 袖珍数据库连接查询手册

    袖珍数据库连接查询手册关键词:Access, Sql Server, Oracle, ASP, ADO袖珍数据库连接查询手册前言:国庆将近,又加上最近有些网友又非要我们写点什么经验的出来,我只好把我平时使用到的一些数据库连接方式和平时收集到的一些资料拿出来就当给大家的节日礼物把。下面的资料可能不太全,但是可以用来做平时的资料查询用的哦,希望能够帮上大家的忙,呵呵。下面将简单介绍一下几种ADO...

  • SQL SELECT 语句

    SELECT 从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下: SELECT select_list[ INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
sql语句-根据不同状态分组查询不同字段总和介绍:华为云为您免费提供sql语句-根据不同状态分组查询不同字段总和在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多sql语句-根据不同状态分组查询不同字段总和的相关内容。| 移动地址: sql语句-根据不同状态分组查询不同字段总和 | 写博客