dig*_*rld 6 mysql sql group-by aggregate
我目前有一个表,可以存储大量项目的统计信息,例如视图,下载,购买等.为了获得每个项目的单个操作计数,我可以使用以下查询:
SELECT *, COUNT(*)
FROM stats
WHERE operation = 'view'
GROUP BY item_id
Run Code Online (Sandbox Code Playgroud)
这给了我所有的项目和他们的观点.然后,我可以将"查看"更改为"购买"或"下载"其他变量.但是,这意味着对数据库进行三次单独调用.
是否有可能将三者合二为一?
Kon*_*rak 11
SELECT item_id, operation, COUNT(*)
FROM stats
WHERE operation IN ('view','purchase','download')
GROUP BY item_id, operation
Run Code Online (Sandbox Code Playgroud)
将返回一个表,每个item_id和操作包含一行,包含三列:item_id,操作类型和具有该item_id的行数.
1 view 3
1 purchase 5
2 download 7
3 download 1
Run Code Online (Sandbox Code Playgroud)
如果你想要所有item_id,你可以省略WHERE,你可以在COUNT(*)中订购以获得最受欢迎的东西.取决于您要查找的内容或您使用数据的方式.
如果您希望彼此旁边的列,请使用IF:
SELECT s1.item_id, SUM( IF( s1.operation = 'view', 1, 0 ) ) views, SUM( IF( s1.operation = 'download', 1, 0 ) ) downloads, SUM( IF( s1.operation = 'purchase', 1, 0 ) ) purchases
FROM stats s1
GROUP BY s1.item_id
item_id | views | downloads | purchases
1 | 3 | 0 | 5
2 | 0 | 7 | 0
3 | 0 | 1 | 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16440 次 |
| 最近记录: |