SELECT id, author_id, max(result_score) as maxscore
FROM submissions
WHERE challenge_id = 10
GROUP BY author_id
ORDER BY maxscore DESC, created_at ASC
此查询从每个作者那里获取得分最高且最早创建的提交(一个)。最后,我们应该以有序提交结束,每个作者一个,所有提交都按 maxscore 和 created_at 排序
这在 SQLite3 中完美运行,但它无法在 PostgreSQL 上编译,因为它更严格。
PostgreSQL 要求 id
用于 group by 子句或某种聚合函数。
我尝试了各种方法,使用 DISTINCT ON
或 HAVING
但无法让它工作。这种查询是否可能?如果可以,有什么方法可以实现我在这里想要的结果?
最佳答案
我设法使用这样的 rank
函数解决了这个问题
SELECT id, author_id, result_score
FROM (
SELECT id, author_id, result_score, created_at,
rank() OVER (PARTITION BY author_id ORDER BY result_score DESC, created_at ASC) AS rank
FROM submission
WHERE challenge_id = %s) as sub
WHERE sub.rank = 1
ORDER BY result_score DESC, created_at ASC
关于SQL - 从每个表中选择最大值,按所述最大值排序,然后按 created_at,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45348946/