小编典典

如果条件独特,则MySQL的不重复计数

sql

我正在尝试建立一个查询,以告诉我给定数据集中有多少不同的男女。该人由数字“电话”标识。同一“电话”可能会出现多次,但是“电话”的性别只能计算一次!

7136609221-男性
7136609222-男性
7136609223-女性
7136609228-男性
7136609222-男性
7136609223-女性

此example_dataset将产生以下结果。
独特性别总数:4
独特男性总数:3
独特女性总数:1

我尝试查询:

SELECT COUNT(DISTINCT tel, gender) as gender_count, 
       COUNT(DISTINCT tel, gender = 'male') as man_count, 
       SUM(if(gender = 'female', 1, 0)) as woman_count 
FROM example_dataset;

实际上有两次尝试。COUNT(DISTINCT tel, gender = 'male') as man_count似乎只返回了相同的内容COUNT(DISTINCT tel, gender)-它没有考虑到那里的预选赛。并且SUM(if(gender = 'female', 1, 0))计数所有女性记录,但不被DISTINCT电话过滤。


阅读 210

收藏
2021-04-15

共1个答案

小编典典

这是使用带有以下子查询的选项DISTINCT

SELECT COUNT(*) gender_count,
   SUM(IF(gender='male',1,0)) male_count,
   SUM(IF(gender='female',1,0)) female_count
FROM (
   SELECT DISTINCT tel, gender
   FROM example_dataset
) t

如果您不想使用子查询,这也将起作用:

SELECT COUNT(DISTINCT tel) gender_count,
    COUNT(DISTINCT CASE WHEN gender = 'male' THEN tel END) male_count,  
    COUNT(DISTINCT CASE WHEN gender = 'female' THEN tel END) female_count
FROM example_dataset
2021-04-15