mysql - 计数不同时的MySQL案例
问题描述
我正在尝试按收视等级计算不同视频的计数。我有下表:
vid_id views
1 6
1 10
1 900
2 850
2 125000
3 1010
3 12239
3 150000
我尝试使用此代码来获得我想要的输出:
SELECT
CASE
WHEN views < 1000 THEN '< 1K Views'
WHEN views >= 1000 AND views < 10000 THEN '1K to 10K Views'
WHEN views >= 10000 AND views < 100000 THEN '10K to 100K Views'
WHEN views >= 100000 AND views < 1000000 THEN '100K to 1M Views'
ELSE '1M+ Views'
END AS tier,
COUNT(distinct vid_id)
FROM
test
GROUP BY
tier
由于每个条目都有多个条目vid_id
,因此我想使用每个层的最大观看次数对每个层的视频计数进行分组vid_id
。所以我的输出应该是:
tier COUNT(views)
< 1K Views 1
100K to 1M Views 2
视频 #1 的观看次数最多达到 900 次,因此它在该< 1K Views
层中。视频 2 和 3 分别达到 125,000 和 150,000 次观看。所以他们在100K to 1M Views
层级。
解决方案
一种解决方案是分两步进行:
- 首先,使用聚合子查询来计算每部电影的最大观看次数
- 然后,将上述信息分层
SQL:
SELECT
CASE
WHEN views < 1000 THEN '< 1K Views'
WHEN views >= 1000 AND views < 10000 THEN '1K to 10K Views'
WHEN views >= 10000 AND views < 100000 THEN '10K to 100K Views'
WHEN views >= 100000 AND views < 1000000 THEN '100K to 1M Views'
ELSE '1M+ Views'
END AS tier,
COUNT(*) as distinct_videos
FROM (
SELECT vid_id, MAX(views) views FROM mytable GROUP BY vid_id
) x
GROUP BY tier
| tier | distinct_videos |
| ---------------- | --------------- |
| 100K to 1M Views | 2 |
| < 1K Views | 1 |
推荐阅读
- python - 代码停止工作。给我一个 `jinja2.exceptions.UndefinedError: 'list object' has no attribute 'items'` 错误
- c# - 无法加载文件或程序集“Xamarin.iOS”或其依赖项之一。无法验证强名称签名 HRESULT:0x80131045
- spring-boot - Hazecast-Kubernetes Springboot 应用嵌入式集群警告
- javascript - 如何使用猫鼬在聚合查询项目中自定义对象数组
- excel-formula - 根据单元格值从单元格中删除特定字符
- python - 使用从父类继承的方法作为子类方法的装饰器
- android - 我在 CustomSwitch 中有一个 RenderFlex 溢出
- azure-cosmosdb - 从文档中提取的 ParitionKey 与标题中指定的不匹配 - C#
- javascript - 如何模拟扩展组件 vue.js
- python - 让DataFrame的列的区别