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

示例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语法

你可能感兴趣的:(sql,java,数据库)