SQL - 从每个表中选择最大值,按所述最大值排序,然后按 created_at

标签 sql postgresql sqlite

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 ONHAVING 但无法让它工作。这种查询是否可能?如果可以,有什么方法可以实现我在这里想要的结果?

最佳答案

我设法使用这样的 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/

相关文章:

sql - 引用外键的值的条件索引

postgresql - "Could not lookup Ecto repo"测试期间错误

java - SQLite、NetBeans、EclipseLink 和 JPA - NetBeans 不断启动 Apache Derby 而不是 SQLite DB

php - MySQL 中的 GROUP_CONCAT() 在插入从另一个表中选择的值时不起作用

sql - Oracle 11g - 运行windows批处理文件在sqlplus中运行多个sql文件

sql - 在 Ubuntu 上创建用户 postgres

c++ - 单引号防止 bindValue 替换占位符标记

objective-c - 尝试打开(创建)SQLite d/b时出错(“EXC_BAD_ACCESS”)

MySQL Join 查询返回太多结果

postgresql - Sequelize模型不区分大小写