【问题标题】:How to compute percentage in each group?如何计算每组的百分比?
【发布时间】:2017-11-12 19:10:41
【问题描述】:

我有一个名为 events 的表,有 5000 个条目。

每个事件都有一个recorded_on 字段,该字段可能为空,也可能不为空。

每个事件还有一个 artist 字段,它是 10 个不同的值之一。

是否在 SQL(特别是 SQLite)的能力范围内发出单个查询,该查询将返回艺术家的姓名以及他们的事件中有多少百分比具有 null 作为 recorded_on 的值?如

ARTIST | PERCENTAGE RECORDED
------------------------------
Joe    | 49.2
Sarah  | 17.8
Mike   | 83.0

【问题讨论】:

    标签: sql sqlite group-by aggregate-functions percentage


    【解决方案1】:

    要为每个组获取一个输出行,请使用 GROUP BY。 recorded_on IS NULL 是一个boolean 表达式,其结果是10

    SELECT artist,
           100.0 * sum(recorded_on IS NULL) / count(*) AS "percentage recorded"
    FROM events
    GROUP BY artist;
    

    【讨论】:

      【解决方案2】:
      select 
          artist,
          ( COUNT(
              CASE recorded_on
                WHEN NULL THEN 1
                ELSE NULL 
              END
          ) / COUNT(*) ) * 100 as percentage
       from event group by artist
      

      【讨论】:

      • 这肯定是对的吗?无论如何,我总是得到 0 作为数字,尽管这可能是我在运行它时的错误。
      • recorded_on 字段可以为 Null 吗?
      • 是的。我可以SELECT COUNT(*) FROM events WHERE recorded_on IS NULL 取回一个号码。
      猜你喜欢
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 2022-11-21
      • 2021-06-25
      • 2021-04-12
      相关资源
      最近更新 更多