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 数据库的基础知识,它是一类更具体的可以管理数据的软件。但是实现数据库的这个软件,需要用到很多的数据结构,下面来看看文章是怎么具体介绍这个数据库的
    2021-12-12
  • Mysql通过ibd文件恢复数据的详细步骤

    Mysql通过ibd文件恢复数据的详细步骤

    mysql在使用的过程中,难免遇到数据库表误操作,下面这篇文章主要给大家介绍了关于Mysql通过ibd文件恢复数据的详细步骤,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • mysql 修改密码和设置允许远程登录

    mysql 修改密码和设置允许远程登录

    这篇文章主要介绍了mysql 修改密码和设置允许远程登录的相关资料,需要的朋友可以参考下
    2015-07-07
  • Mysql慢查询日志文件转Excel的方法

    Mysql慢查询日志文件转Excel的方法

    面对公司生产环境中慢SQL问题的排查工作,由于日志文件格式混乱,相关资料无法提供便捷的格式化处理工具,故而自主编写一套Java读取慢SQL日志转为Excel的小工具,该工具可以有效提升排查工作的效率,方便快捷地解决问题
    2024-10-10
  • mysql主从同步快速设置方法

    mysql主从同步快速设置方法

    记录一个比较简便的mysql的主从同步设置步骤,方便日后使用。
    2010-12-12
  • MYSQL跨服务器同步数据经验分享

    MYSQL跨服务器同步数据经验分享

    这篇文章主要介绍了MYSQL跨服务器同步数据详细过程,需要的朋友可以参考下
    2014-03-03
  • MySQL获取行号的示例代码

    MySQL获取行号的示例代码

    MySQL变量是一种用于存储和操纵数据的数据类型,通过在SQL查询中使用变量,我们可以创建一个MySQL查询,用于获取每行数据的行号,这篇文章主要介绍了MySQL 如何获取行号,需要的朋友可以参考下
    2023-08-08
  • 一篇文章带你了解MySQL之undo日志

    一篇文章带你了解MySQL之undo日志

    Undo日志也叫做回滚日志,是MySQL数据库当中一种重要的日志,用于记录更新操作之前的数据状态,这篇文章主要给大家介绍了关于如何通过一篇文章带你了解MySQL之undo日志的相关资料,需要的朋友可以参考下
    2023-06-06
  • 体验MySQL5.6.25并处理所遇到的问题

    体验MySQL5.6.25并处理所遇到的问题

    本文给大家分享的是将mysql升级到5.6.25版本后所遇到的2个问题的处理解决办法,有需要的小伙伴可以参考下。
    2015-07-07
  • K8S搭建MySQL一主一从集群详细步骤

    K8S搭建MySQL一主一从集群详细步骤

    在k8s上命名空间是用于隔离不同应用的一种机制,我们可以使用命名空间来组织和管理MySQL集群,这篇文章主要给大家介绍了关于K8S搭建MySQL一主一从集群的相关资料,需要的朋友可以参考下
    2023-09-09

最新评论