按组合行对表进行排序

时间:2015-03-23 08:37:32

标签: mysql

我有一个包含超过5亿行的数据库表,结构如下:

|username  |date      |      units|
|user1     |2015-03-20|          5|
|user2     |2015-03-20|          7|
|user3     |2015-03-20|          3|
|user1     |2015-03-21|          9|
|user2     |2015-03-21|          4|
|user3     |2015-03-21|         11|

当然,这是简化的,表中有大约200万个唯一用户名,每个用户名每天都有一个新行。

按过去7天内最高合计总数units(或该数据库中该用户的过去7个条目)排序的最佳方法是什么?我需要查看前25位左右的用户,返回用户名及其合并后的units

1 个答案:

答案 0 :(得分:0)

过滤,分组,排序和限制:

SELECT   username, SUM(units)
FROM     myTable
WHERE    date >= CURRENT_DATE - INTERVAL 7 DAY  -- filter
GROUP BY username                               -- group
ORDER BY SUM(units) DESC                        -- sort
LIMIT    25                                     -- limit

对于在(username, date, units)上定义的复合索引,此查询将是最佳选择。