Postgres: 为什么DISTINCT ON表达式必须与最左边的ORDER BY表达式匹配?

为什么我不能用任何其他表达式检索第一条不同的记录,为什么最左边的表达式必须与我在DISTINCT ON中使用的表达式相同?

解决方案:

好吧,ORDER BY是为了让那些 “不同列 “的值相同的行保持在一起。数据库会按顺序处理它们,丢弃同一组的所有后续行。如果不对行进行排序,就不容易做到这一点。

假设这组行。

c1 | c2 
---+----
 1 | 100
 2 |  10
 1 | 200
 2 |  15

如果你想让c1是唯一的,并选取最高的c2,你就需要使用:

select distinct on (c1) *
from the_table
order by c1, c2 desc;

order by 本身会产生以下结果。

c1 | c2 
---+----
 1 | 200
 1 | 100
 2 |  15
 2 |  10

通过逐行处理该结果,数据库现在可以有效地丢弃除第一条记录以外的每条 c1 通过简单地检查该值是否从一行变化到另一行。如果结果没有排序,这个检查就会变得复杂得多。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

子文件夹中的C++ dll

2022-5-12 20:38:14

解决方案

如何在python类中添加可选参数?

2022-5-12 20:38:25

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索