【问题标题】:SQL - Calculate percentage on count(column)SQL - 计算计数百分比(列)
【发布时间】:2016-05-18 23:21:42
【问题描述】:

我有以下一段代码,它计算事件列中出现的次数。

SELECT event, count(event) as event_count   
FROM event_information
group by event

event   event_count
a       34
b       256
c       45
d       117
e       3

我希望能够像这样计算每一行的百分比。

event   event_count event_percent
a       34          7.47
b       256         56.26
c       45          9.89
d       117         25.71
e       3           0.66

【问题讨论】:

  • 您使用的是哪个数据库?
  • 获取总事件并保存到变量中。在原始选择语句中使用该变量

标签: sql percentage calculated-field


【解决方案1】:

大多数 SQL 方言都支持 ANSI 标准窗口函数。因此,您可以将查询编写为:

select event, count(*) as event_count,
       count(*) * 100.0/ sum(count(*)) over () as event_percent
from event_information
group by event;

窗口函数通常比子查询和其他方法更有效。

【讨论】:

  • 我从未见过这种语法 - 它以一种更优雅的方式解决了确切的问题,因为它尊重主要 WHERE 中放置的任何子句。
【解决方案2】:
SELECT event, 
       count(event) as event_count,
       count(event) * 100.0 / (select count(*) from event_information) as event_percent
FROM event_information
group by event

【讨论】:

  • 这很好用,直到我在 where 子句中放置一个日期范围。正在计算的百分比是从整组数据中计算出来的,而不仅仅是日期范围。正如你可以想象的那样,随着 event_count 的降低,所有的百分比都变得非常小。
  • 只需将相同的where 子句添加到内部选择。
  • @juergend 对于大型数据集来说计算量会不会太大?
  • @Ali:我认为正确索引的表不是问题。
猜你喜欢
  • 2023-02-01
  • 2015-06-11
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多