SQL查询找到每种类型的最大计数对应的条目

标签 sql postgresql

我在 Postgres 中有一个表 X,其中包含以下条目

A     B     C
2     3     1
3     3     1
0     4     1
1     4     1
2     4     1
3     4     1
0     5     1
1     5     1
2     5     1
3     5     1
0     2     2
1     2     3

我想为每种 A 和 B 找出具有最大 C 列的条目,即(按 B 分组)具有最有效的查询并返回相应的 A 和 B。

预期输出:

A     B      C
1     2      3
2     3      1
0     4      1    
0     5      1 

请帮我解决这个问题。谢谢

最佳答案

demo: db<>fiddle

使用 DISTINCT ON:

SELECT DISTINCT ON (B)
    A, B, C
FROM
    my_table
ORDER BY B, C DESC, A 

DISTINCT ON 为您提供有序组的第一行。在这种情况下,B 被分组。

B排序后(这是必要的):我们首先将最大的C(带有DESC)排序到每个组的顶部。然后(如果有绑定(bind)的 MAX(C) 值)我们命令 A 使最小的 A 到达顶部。

关于SQL查询找到每种类型的最大计数对应的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53671922/

相关文章:

sql - 使用 rpad 填充 Postgresql 中的字符串而不截断它

sql - 在 postgresql 中将组合插入到表中的更快方法

laravel - 如何将 Postgres 中的 blob 作为 Laravel 中的文件提供服务?

sql - 将 double 转换为文本的 Postgres 创建 '1.50000000000'

node.js - PostgreSQL 仅在事务完成后通知

sql - 解析 SQL 语句的库

sql - 是否有一种优雅的交叉实现方式可以在没有专门解析的情况下保存多条记录?

php - 绕过 php is_numeric() 函数可能吗?

sql - 数组json将元素拆分为列postgres

Sql Group by Value1 有 count(*) > 1 但有不同的值 2