场景是这样的,要对某一个表里面的数据进行统计,但是可能会有重复数据,下面就是针对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很复杂而且不灵活,就改成了这种方式,简洁明了

本文介绍了一种在SQL中对含有重复数据的表进行男女比例去重统计的方法,通过使用DISTINCT关键字结合CASE语句,有效地避免了因重名导致的统计误差,使统计结果更加精确。
263

被折叠的 条评论
为什么被折叠?



