【问题标题】:COUNT with IF FROM DISTINCT values MySQLCOUNT 与 IF FROM DISTINCT 值 MySQL
【发布时间】:2019-09-16 23:24:10
【问题描述】:

在对 UserID 执行 DISTINCT 之后,我试图计算有多少用户是女性和多少男性

SELECT
COUNT(IF("Gender" = 'female', 1, NULL)) as Ufemale,
COUNT(IF("Gender" = 'male', 1, NULL)) as Umale
FROM (SELECT DISTINCT UserID FROM user_stats where Year='2019' and Account='P') as UID

如果我执行

SELECT DISTINCT UserID FROM user_stats where Year='2019' and Account='P'

它返回唯一的用户 ID。但是,如果我将它与计数性别部分结合起来,它会返回零。

这是值的样子

UserID            |  Gender
-----------------------------
2018359084885123  |  male
1925823664195671  |  female
2033134076795519  |
2122445674469149  |  female
2315129265210413  |  female
2018359084885123  |  male
2122445674469149  |  female

目的是展示

Ufemale  |  Umale
-------------------
   3     |    1

【问题讨论】:

  • 你可以把SELECT DISTINCT UserID FROM user_stats where Year='2019' and Account='P'改成SELECT DISTINCT UserID, gender FROM user_stats where Year='2019' and Account='P'
  • “我正在尝试计算女性用户数和男性用户数” 那么基于当前数据的预期结果将是 4 和 2?此外,您的示例数据缺少年份和帐户列。

标签: mysql count distinct-values


【解决方案1】:

试试这个:

表格

drop table if exists test;

create table test (userid bigint, gender char(6));

insert into test values
(2018359084885123,'male')
,(1925823664195671,'female')
,(2033134076795519, null)
,(2122445674469149,'female')
,(2315129265210413,'female')
,(2018359084885123,'male')
,(2122445674469149,'female');

查询

select
    sum(case when gender = 'female' then 1 else 0 end) as ufemale,
    sum(case when gender = 'male' then 1 else 0 end) as umale
from
(select distinct userid, gender from test) x

结果

ufemale umale
3       1

示例:https://rextester.com/JLQ19855

【讨论】:

    【解决方案2】:

    子查询结果中没有Gender列:

    SELECT DISTINCT UserID FROM user_stats where Year='2019' and Account='P'
    

    如你所想。
    你正在做的是比较 2 个字符串:"Gender"'female' 这显然不相等,所以这个:

    IF("Gender" = 'female', 1, NULL)
    

    返回NULLCOUNT(NULL) 返回0
    Gender 列在哪里?
    它是在user_stats 表中还是在另一个表中,例如Users
    如果它在user_stats 中,那么您需要像这样编写查询:

    select
      sum(t.gender = 'female') ufemale,
      sum(t.gender = 'male') umale
    from (
      select distinct userid, gender 
      from user_stats 
      where Year='2019' and Account='P'
    ) t
    

    如果它在users 表中,那么您首先需要一个连接:

    select
      sum(u.gender = 'female') ufemale,
      sum(u.gender = 'male') umale
    from (
      select distinct userid, gender 
      from user_stats 
      where Year='2019' and Account='P'
    ) t inner join users u
    on u.userid = t.userid
    

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 2013-05-12
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      相关资源
      最近更新 更多