如果条件唯一,MySQL独特计数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果条件唯一,MySQL独特计数相关的知识,希望对你有一定的参考价值。

我正在尝试构建一个查询,告诉我在给定的数据集中有多少不同的女性和男性。该人员由数字'tel'标识。同一个'tel'可能会出现多次,但'tel'的性别应该只计算一次!

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 tels过滤。

答案

这是使用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

以上是关于如果条件唯一,MySQL独特计数的主要内容,如果未能解决你的问题,请参考以下文章

在excel中获得两个条件的唯一计数

带计数器的独特因式分解

为什么我不能在此片段中生成唯一对象数组?

Hive:如果两个表之间满足条件,则查找唯一值

列表中每个唯一元素的计数[重复]

独特的个人资料视图计数器