如何计算每组的百分比?

Posted

技术标签:

【中文标题】如何计算每组的百分比?【英文标题】: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

【问题讨论】:

【参考方案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 取回一个号码。

以上是关于如何计算每组的百分比?的主要内容,如果未能解决你的问题,请参考以下文章

计算特定组的百分位数

计算特定组的百分位数

Spotfire - 查找小计的百分比

计算不同时间段内子组的数据框中的百分比变化

如何计算 SQL 表中前一个数字的百分比?

如何计算基于组的分位数?