mysql - 每次出现的最大值的 SQL 总和

标签 mysql sql sum max

我有下表:

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, 的最大 views >id 5 是 75。因此 category 1 的总和是 275。

对于 category 2,id 6 的最大 views 为 95, 的最大 views >id 9 是 135。因此 category 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/

相关文章:

c - 使用数组来统计选票

javascript - 如何在 Javascript 或 JQuery 中对非空 <td> 元素的值求和

mysql DATE_FORMAT 使用 select *

php - MySQL 和 PHP : Sorting text by alphabetical order for English & string length for non-English

PHP - 将 csv 导入数据库数据时间过长

mysql - 使用两个 where 子句过滤结果

sql - 与 Oracle 11g 中元组中的 null 进行比较

mysql - 使用 INNER JOIN 的 SQL 更新

c# - 将一个数组拆分为另一个数组

mysql - Doctrine 2 SUM() 等效助手?