【问题标题】:Sqlite group by distinct countSqlite 按不同计数分组
【发布时间】:2021-07-05 01:16:30
【问题描述】:

我有客户操作表:

date, client_id, gender
1     1          M
1     1          M
1     2          M
1     2          M
1     3          F
2     1          M
2     1          M
2     1          M
2     2          M
2     2          M
2     3          F
2     3          F
2     4          F
2     5          M
2     5          M
etc

期望的输出是:

date, amount of males, (also need amount of females)
1     2                1 
2     3                2

我需要按日期对其进行分组,所以我做到了,然后我的目标是找到每个分组中每种性别的数量。 所以我试着这样做来计算男性的数量:

sum(case when gender = 'M' then 1 else NULL end) as 'M%'

但其计数的客户 id 1 和 2 各两次,但我需要区分它。 在上面的示例中,我希望这会返回 2,因为 2 男性。但它返回 4 因为不同的构造不起作用。 我试过了,但它不起作用,结果是“1”:

sum(distinct case when gender = 'M' then 1 else NULL end) as 'M%'

【问题讨论】:

  • 您是否只需要dategender 计数,而忽略client_id
  • 我使用了group by date,所以我需要计算每组中男性的数量。但只有“唯一”值,所以在示例表中它应该是 2,因为有 2 个男性性别的 client_id。不是 4
  • 请提供样本数据和所需的输出
  • 如果您找到的解决方案与已发布的答案不同,请将其作为新答案发布。如果以下答案之一作为解决方案,请单击其分数旁边的复选标记“接受”它。不要编辑您的问题以包含解决方案;这不是问题的目的。

标签: sql database sqlite


【解决方案1】:

从表的不同行数更容易。
此外,使用 SQLite 的功能将布尔表达式视为 1 用于 true0 用于 false 以便您可以对它们求和而不是使用 CASE 表达式:

SELECT date,
       SUM(gender = 'M') [amount of males],
       SUM(gender = 'F') [amount of females]
FROM (SELECT DISTINCT date, client_id, gender FROM tablename)
GROUP BY date

请参阅demo

【讨论】:

    【解决方案2】:

    你似乎想要有条件的count(distinct)

    select date,
        count(distinct case when gender = 'M' then client_id end) as count_m,
        count(distinct case when gender = 'F' then client_id end) as count_f
    from t
    group by date;
    

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 1970-01-01
      • 2018-07-03
      • 2012-07-29
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      相关资源
      最近更新 更多