场景是这样的,要对某一个表里面的数据进行统计,但是可能会有重复数据,下面就是针对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