场景是这样的,要对某一个表里面的数据进行统计,但是可能会有重复数据,下面就是针对person 表,查询表中男女的去重统计,假如有的名字重复了。重名的不查出来 SELECT count( CASE WHEN p.sex= "01" THEN 1 ELSE NULL END ) AS '男', count( CASE WHEN p.sex= "02" THEN 1 ELSE NULL END ) AS '女' FROM ( SELECT DISTINCT t.name, t.sex FROM person t ) p;
先用 DISTINCT查询出name和sex当做临时表,DISTINCT会把整个要查询的东西作为去重的条件,也就是你查什么,就把什么当做去重条件,这里把name加上,就是把名字和性别当做去重条件了,这样名字和性别相同的就去重了。这时候把查询结果当做临时表,再根据性别做统计就行了。试过了很多方式,本来用case when then count很复杂而且不灵活,就改成了这种方式,简洁明了
来源:CSDN
作者:不喂鱼
链接:https://blog.csdn.net/chen1992xin/article/details/103663129