首页 > 解决方案 > SQL 中占总数的百分比

问题描述

我有一个包含以下列的表。我想知道有多少天有四个或更多的视频发布?最有效的方法是什么?

|  video_id  |  published_date  |
+------------+------------------+
|   abc      |     9/1/2018     |
|   dca      |     9/4/2018     |
|   5555     |     9/1/2018     |

标签: sql

解决方案


Oracle 解决方案:DEMO

select sum(perc)  from (
select published_date
       , round(100*(count(*) / sum(count(*)) over ()),2) perc
       , count(published_date) cc
from dense_rank_demo
group by published_date)
where cc >= 4;

以下是评论中对 OP 问题的附加解释:“你能解释一下这个函数应该完成什么吗?SUM(COUNT(*)) over ()),2) perc”

  1. 首先让我们清理这个问题,并说最后一部分“,2)”来自 ROUND 函数,该函数将小数结果四舍五入到只有两位小数(这就是为什么有数字 2)。
  2. OVER 部分指定分析函数操作的分区和排序。因为没有指定任何内容,它将结合 SUM(COUNT(*)) 获得所有记录的总和。
  3. 我在这里添加了带有一些附加列的附加选择:DEMO,它可以帮助您更多地理解这个 SUM(COUNT(*)) over ()) 部分。
  4. 详细到数字解释“COUNT(*)”给了我每个日期的总计数,因为我已经添加了这个“group by published_date”。这意味着它在我的示例中给出了 3 个结果:4、4 和 3。命令的 SUM 部分像这样聚合:4+4+3 并返回 11。

SQL Server 解决方案:DEMO

select sum(perc) Perc  from (
select published_date
       , round(Count(published_date)* 100 / (Select Count(*) From dense_rank_demo), 2) perc
       , count(published_date) cc
from dense_rank_demo
group by published_date) t
where cc >= 4;

推荐阅读