一条SQL同时获取总数和分组数量

文章介绍了如何在SQL查询中通过添加额外的COUNT函数来同时获取整体数量和按特定列分组的数量。对于有多个值的列col4,通过短路逻辑运算符在MyBatis的XMLSQL中实现了不同条件下的计数,如col4为1、2或其他的情况,提供了一种避免多次查询的方法。
摘要由CSDN通过智能技术生成

示例sql如下

select col1,col2,col3,count(*)
from table1 t1
join table2 t2 on t1.col1 = t2.col1
where 1=1
group by col1,col2,col3

这里是整体数量count,当有一个col4,以它的值为分组条件进行分组,一般情况下,应为

select col1,col2,col3,,col4,count(*)
from table1 t1
join table2 t2 on t1.col1 = t2.col1
where 1=1
group by col1,col2,col3,col4

这样求整体和求分组只能通过两条sql查询,且想将col4多个值为一组时还需要额外操作,比较麻烦
我修改如下

select col1,col2,col3,
--总条数
count(1),
--排除col4为1,2的数据条数
count((col4=1||col4=2)&&null),
--col4为1时的数据条数
count((col4!=1)&&null),
--col4为2的数据条数
count((col4!=2)&&null),
--col4小于等于2的数据条数
count((col4>2)&&null),
from table1 t1
join table2 t2 on t1.col1 = t2.col1
where 1=1
group by col1,col2,col3,col4

tips:

使用mybatis的xml编写sql时,请将【&&】替换为【&&】

count函数,参数为null时不加1

短路与,短路或,参考js语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值