【发布时间】:2016-09-28 13:11:27
【问题描述】:
我正在使用 postgresql,但我不熟悉它。该代码有效,但我想知道是否可以以更直接的方式编写它。在这里,我加入 bar 以在子查询中加入 bar。我希望有一些简单的东西,比如select * from bar group by baz using max(z)
select *
from foo f
join bar b on(f.baz=b.baz AND b.z in (select max(z) from bar group by baz))
where uid1 = 120
【问题讨论】:
-
uid1是bar或foo的列吗?最好的查询取决于它。 Postgres 版本和表定义也很重要。 -
@ErwinBrandstetter uid 来自 bar,但实际上我只是在学习如何以更简单的方式完成这个常用的行文。看来
explain更喜欢 distinct/orderby 方法,我也喜欢。 -
Postgres 查询计划器更喜欢什么(你可以通过
EXPLAIN看到),很大程度上取决于完整的画面。使用大表,您的查询可以以一种或另一种方式更快。与小桌子无关紧要。但是性能优化超出了这个问题的范围。
标签: sql postgresql greatest-n-per-group