使SQL查询更有效

6 sql t-sql performance

我有一个问题的查询

select b.* from
(select key, max(val) as val from (somequery) group by key) as a
inner join
(somequery) as b
on a.key = b.key and a.val = b.val
order by key
Run Code Online (Sandbox Code Playgroud)

而且我想知道是否有一种显而易见的方式(我错过了)来简化它(假设某些查询可能相当长).

任何想法将不胜感激.

Eri*_*ric 2

有,但肯定不明显:

select
    *
from
    (
    select
        key,
        val,
        col,
        max(val) over (partition by key) as MaxVal
    from
        tableA
    )
where
    val = MaxVal
Run Code Online (Sandbox Code Playgroud)

使用over子句是执行此操作的好方法,并且不需要任何无关的子查询。它所做的就是获取每个键的最大值val,然后将该结果集包装在子查询中,我们可以在子查询中检查valMaxVal确保我们提取正确的行。

比执行最多三个子查询更干净、更快!