【发布时间】:2016-10-24 12:35:01
【问题描述】:
Given:一个排名表(id、user_id、score、group_id、date)
目前我们根据所有参与用户的总和和平均来计算排名。
SELECT
ROUND(AVG(r.score)::NUMERIC, 2) AS score,
SUM(score) AS score_sum,
MAX(r.date) AS ranking_timestamp,
a.name AS group_name,
a.id AS group_id
FROM
ranking r, group a
WHERE a.id = r.group_id
GROUP BY a.id,a.name
ORDER BY AVG(r.score) DESC,MAX(r.date) ASC
现在我们想改变它。不尊重所有参与用户,而是只选取 10 个最佳用户,计算 SUM 和 AVG。
这可能在一个语句中吗?
【问题讨论】:
-
最好 - 根据什么?那么领带呢?
-
也许一种方法是使用子查询来获得最好的 10 个,然后运行分组查询。
标签: sql limit average ranking partition