我有一个包含超过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
。
答案 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)
上定义的复合索引,此查询将是最佳选择。