如何计算各流媒体平台儿童向内容的占比?
问题描述
我有一张名为streaming的表,包含service(平台)和genre(类型)两个字段。
我先执行了以下查询,筛选出所有儿童向内容:
SELECT * FROM streaming WHERE genre LIKE '%kids%' OR genre LIKE '&family&' OR genre LIKE '%children%';
执行后返回了171行数据。
随后我编写了统计各平台儿童向内容数量的SQL:
SELECT service, COUNT(CASE WHEN genre LIKE '%kids%' OR genre LIKE '&family&' OR genre LIKE '%children%' THEN 1.0000 OR 0.0000 END ) AS perc_family FROM streaming GROUP BY service ORDER BY perc_family;
该语句返回了各平台的儿童向内容数量:
| service | perc_family |
|---|---|
| disney | 4 |
| hulu | 18 |
| amazon | 42 |
| netflix | 107 |
但我需要的是各平台儿童向内容占总儿童向内容的百分比,期望结果如下:
| service | perc_family |
|---|---|
| disney | 2.3 |
| hulu | 10.5 |
| amazon | 24.6 |
| netflix | 62.6 |
解决方案
要得到目标百分比,需用各平台的儿童向内容数量除以总儿童向内容数(171),再转为百分比格式并保留一位小数。修正后的SQL如下:
SELECT service, ROUND( COUNT(CASE WHEN genre LIKE '%kids%' OR genre LIKE '&family&' OR genre LIKE '%children%' THEN 1 END) * 100.0 / (SELECT COUNT(*) FROM streaming WHERE genre LIKE '%kids%' OR genre LIKE '&family&' OR genre LIKE '%children%'), 1 ) AS perc_family FROM streaming GROUP BY service ORDER BY perc_family;
关键说明:
- 子查询
(SELECT COUNT(*) FROM streaming WHERE ...)用于获取所有儿童向内容的总数(即171),保证计算的基准准确。 - 用每个平台的儿童向内容数量乘以100.0将结果转为百分比维度,再除以总数得到占比。
- 使用
ROUND(...,1)将结果保留一位小数,匹配期望的输出格式。 - 原SQL的
CASE语句存在语法错误:THEN 1.0000 OR 0.0000写法无效,正确逻辑是满足条件返回1,不满足则返回NULL(COUNT会自动忽略NULL值,无需额外写ELSE 0)。
内容的提问来源于stack exchange,提问作者Abrar M
相关产品推荐
相关产品推荐

