我有下表:
category id date views
1 3 5-1-17 40
1 3 5-2-17 70
1 3 5-3-17 110
1 3 5-4-17 200
1 5 5-1-17 50
1 5 5-2-17 75
2 6 4-1-17 90
2 6 4-2-17 95
2 9 4-3-17 115
2 9 6-5-17 125
2 9 6-6-17 135
如何按 category
对每个 id
的最大 views
求和?
生成的拉动应该如下所示:
category views
1 275
2 230
对于 category
1,id
3 的最大 views
是 200, 的最大
5 是 75。因此 views
>idcategory
1 的总和是 275。
对于 category
2,id
6 的最大 views
为 95, 的最大
9 是 135。因此 views
>idcategory
2 的总和是 230。
最佳答案
您可以使用两个级别的聚合:
select category, sum(max_views)
from (select category, id, max(views) as max_views
from t
group by category, id
) t
group by category;
你也可以在这里使用row_number()
:
select category, sum(max_views)
from (select t.*,
row_number() over (partition by category, id, order by views desc) as seqnum
from t
) t
where seqnum = 1
group by category;
哪个更快会很有趣。我会投票支持双重聚合,但这可能并不总是正确的。
关于mysql - 每次出现的最大值的 SQL 总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57958355/