sql - SQL 中占总数的百分比
问题描述
我有一个包含以下列的表。我想知道有多少天有四个或更多的视频发布?最有效的方法是什么?
| video_id | published_date |
+------------+------------------+
| abc | 9/1/2018 |
| dca | 9/4/2018 |
| 5555 | 9/1/2018 |
解决方案
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”
- 首先让我们清理这个问题,并说最后一部分“,2)”来自 ROUND 函数,该函数将小数结果四舍五入到只有两位小数(这就是为什么有数字 2)。
- OVER 部分指定分析函数操作的分区和排序。因为没有指定任何内容,它将结合 SUM(COUNT(*)) 获得所有记录的总和。
- 我在这里添加了带有一些附加列的附加选择:DEMO,它可以帮助您更多地理解这个 SUM(COUNT(*)) over ()) 部分。
- 详细到数字解释“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;
推荐阅读
- php - WooCommerce editable custom checkout field and displayed in formatted address
- r - Fill in missing values (nacof/nocb) in character column by group
- typescript - how to change the particular marker color in angular maps
- java - Spring Boot Rest + ClearDB mySQL "exceeded 'max_user_connections'" error
- amazon-web-services - pm2: command not found after npm -g
- r - 如何消除 for 循环中的最大值以满足特定条件?
- python - 合并几个字典,在不同的值上创建数组
- android - 我们可以显示从 Play 商店开发者帐户弹出的应用程序“维护/服务已禁用”吗?
- serialization - 如何在 Lua 中序列化元表?
- python - 使用 for 循环生成 pandas 数据帧