mysql一条sql查出多个条件不同的sum或count问题

 更新时间:2023年05月29日 09:50:02   作者:码农王山  
这篇文章主要介绍了mysql一条sql查出多个条件不同的sum或count问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

一条sql查出多个条件不同的sum或count

最近做java后台遇到很多问题记录一下,有个需求是在一条sql中同时统计到几条条件不一样的sql或count,就用了子查询,希望能帮助到需要的朋友,上代码和效果图:

select 
sum(pzgwjscd) as allJsgm,sbjh.nd as nd, 
( select sum(pzgwjscd) from fm_jh_ws_ptgw ptgw left join fm_sb_jh sbjh on ptgw.sbid = sbjh.id 
where substring(ptgw.xzqh,1,4) LIKE CONCAT ('3301') and ptgw.zt != 0 and sbjh.nd=2017 ) as hzJsgm, 
( select sum(pzgwjscd) from fm_jh_ws_ptgw ptgw left join fm_sb_jh sbjh on ptgw.sbid = sbjh.id 
where substring(ptgw.xzqh,1,4) LIKE CONCAT ('3303') and ptgw.zt != 0 and sbjh.nd=2017) as wzJsgm, 
( select sum(pzgwjscd) from fm_jh_ws_ptgw ptgw left join fm_sb_jh sbjh on ptgw.sbid = sbjh.id 
where substring(ptgw.xzqh,1,4) LIKE CONCAT ('3304') and ptgw.zt != 0 and sbjh.nd=2017 ) as jxJsgm, 
( select sum(pzgwjscd) from fm_jh_ws_ptgw ptgw left join fm_sb_jh sbjh on ptgw.sbid = sbjh.id 
where substring(ptgw.xzqh,1,4) LIKE CONCAT ('3305') and ptgw.zt != 0 and sbjh.nd=2017) as huzJsgm, 
( select sum(pzgwjscd) from fm_jh_ws_ptgw ptgw left join fm_sb_jh sbjh on ptgw.sbid = sbjh.id 
where substring(ptgw.xzqh,1,4) LIKE CONCAT ('3306') and ptgw.zt != 0 and sbjh.nd=2017 ) as sxJsgm, 
( select sum(pzgwjscd) from fm_jh_ws_ptgw ptgw left join fm_sb_jh sbjh on ptgw.sbid = sbjh.id 
where substring(ptgw.xzqh,1,4) LIKE CONCAT ('3307') and ptgw.zt != 0 and sbjh.nd=2017 ) as jhJsgm, 
( select sum(pzgwjscd) from fm_jh_ws_ptgw ptgw left join fm_sb_jh sbjh on ptgw.sbid = sbjh.id 
where substring(ptgw.xzqh,1,4) LIKE CONCAT ('3308') and ptgw.zt != 0 and sbjh.nd=2017 ) as qzJsgm, 
( select sum(pzgwjscd) from fm_jh_ws_ptgw ptgw left join fm_sb_jh sbjh on ptgw.sbid = sbjh.id 
where substring(ptgw.xzqh,1,4) LIKE CONCAT ('3309') and ptgw.zt != 0 and sbjh.nd=2017 ) as zsJsgm, 
( select sum(pzgwjscd) from fm_jh_ws_ptgw ptgw left join fm_sb_jh sbjh on ptgw.sbid = sbjh.id 
where substring(ptgw.xzqh,1,4) LIKE CONCAT ('3310') and ptgw.zt != 0 and sbjh.nd=2017 ) as tzJsgm, 
( select sum(pzgwjscd) from fm_jh_ws_ptgw ptgw left join fm_sb_jh sbjh on ptgw.sbid = sbjh.id 
where substring(ptgw.xzqh,1,4) LIKE CONCAT ('3311') and ptgw.zt != 0 and sbjh.nd=2017 ) as lsJsgm 
from fm_jh_ws_ptgw ptgw 
left join fm_sb_jh sbjh on ptgw.sbid = sbjh.id 
where 1=1 and ptgw.zt != 0 and sbjh.nd=2017 

数据库表

查询结果:

Sql根据不同条件统计总数

经常会遇到根据不同的条件统计总数的问题,一般有两种写法:count和sum都可以

数据准备:

方法一 :Count

代码:

SELECT
	COUNT(
		CASE
		WHEN age > 20
		AND age < 25 THEN
			1
		ELSE
			NULL
		END
	) AS cnt0,
	COUNT(
		CASE
		WHEN age >= 25
		AND age < 30 THEN
			1
		ELSE
			NULL
		END
	) AS cnt1
FROM
	USER;

结果:

方法二:sum

代码:

SELECT
	SUM(
		CASE
		WHEN age > 20
		AND age < 25 THEN
			1
		ELSE
			0
		END
	) AS cnt0,
	SUM(
		CASE
		WHEN age >= 25
		AND age < 30 THEN
			1
		ELSE
			0
		END
	) AS cnt1
FROM
	USER;

结果:

当然也可以和count代码一样ELSE后面也写为NULL

SELECT
	SUM(
		CASE
		WHEN age > 20
		AND age < 25 THEN
			1
		ELSE
			NULL
		END
	) AS cnt0,
	SUM(
		CASE
		WHEN age >= 25
		AND age < 30 THEN
			1
		ELSE
			NULL
		END
	) AS cnt1
FROM
	USER;

后记

其实原理很简单,count统计的时候有满足条件的就加1,没有满足的变为NULL,我们知道聚合函数统计的时候是忽略null值的;而sum原理和coun相似,不过ELSE后面可以是0或者NULL。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL存储过程中变量的定义以及应用详解

    MySQL存储过程中变量的定义以及应用详解

    MySQL变量定义和应用是我们经常会遇到的问题,下面这篇文章主要给大家介绍了关于MySQL存储过程中变量的定义以及应用的相关资料,文章通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • MySQL主键生成的四种方式及对比详解

    MySQL主键生成的四种方式及对比详解

    在数据库设计中,主键(Primary Key)的选择至关重要,它不仅是数据行的唯一标识,还直接影响查询效率、数据存储甚至系统架构的扩展性,本文给大家分析了常见四种主键ID生成的方式,需要的朋友可以参考下
    2025-03-03
  • 如何解决MySQL this is incompatible with sql_mode=only_full_group_by问题

    如何解决MySQL this is incompatible with sql_mode=only_full_

    MySQL的ONLY_FULL_GROUP_BY模式要求在使用GROUP BY时,SELECT语句中引用的所有列必须在GROUP BY子句中明确指定,或者是聚合函数的一部分,本文提供了修改SQL语句、使用聚合函数、禁用ONLY_FULL_GROUP_BY等解决方法,并强调了在禁用该模式时应评估其影响
    2024-11-11
  • 如何使用mysql语句进行多表联查(以三个表为例)

    如何使用mysql语句进行多表联查(以三个表为例)

    这篇文章主要介绍了如何使用mysql语句进行多表联查(以三个表为例),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • CentOS7环境下安装MySQL5.5数据库

    CentOS7环境下安装MySQL5.5数据库

    大家好,本篇文章主要讲的是CentOS7环境下安装MySQL5.5数据库,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • mysql多实例部署实例教程

    mysql多实例部署实例教程

    这篇文章主要介绍了mysql多实例部署,主要包括软件下载、配置用户并解压二进制程序至/usr/local下及创建各实例数据存放的目录,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • MySQL问答系列之如何避免ibdata1文件大小暴涨

    MySQL问答系列之如何避免ibdata1文件大小暴涨

    MySql innodb如果是共享表空间,ibdata1文件会越来越大,所以下面这篇文章主要给大家介绍了关于MySQL问答系列之如何避免ibdata1文件大小暴涨的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-09-09
  • MySQL存储引擎InnoDB的配置与使用的讲解

    MySQL存储引擎InnoDB的配置与使用的讲解

    今天小编就为大家分享一篇关于MySQL存储引擎InnoDB的配置与使用的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 一次Mysql死锁排查过程的全纪录

    一次Mysql死锁排查过程的全纪录

    在测试环境测试给用户并发发送卡券时,出现了死锁,通过查找相关的资料解决了这个,所以想着总结出来,所以下面这篇文章主要是关于一次Mysql死锁排查过程的全纪录,需要的朋友可以参考下,希望大家从中能有所帮助。
    2017-02-02
  • MySQL命令行方式进行数据备份与恢复

    MySQL命令行方式进行数据备份与恢复

    本文主要介绍了MySQL命令行方式进行数据备份与恢复,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论