select
TV.ATTRIBUTE
FROM
TABLE_VALUE TV
WHERE
TV.NUMBERS IN (SELECT MAX(TV1.NUMBERS) FROM TABLE_VALUE TV1
WHERE TV.UNIQUE_ID=TV1.UNIQUE_ID GROUP BY UNIQUE_ID )
我不确定exists
在这里会有帮助,因为正如您所说,对于每个unique_id
,都有多个numbers
值,并且您希望为该特定unique_id
选择最高numbers
的属性。
exists
在您想检查某个东西是否。。。嗯,存在,但这里不是这样。
您不需要EXISTS
,而是可以使用RANK
或DENSE_RANK
分析函数:
SELECT attribute
FROM (
SELECT attribute,
DENSE_RANK() OVER (PARTITION BY unique_id ORDER BY numbers DESC) AS rnk
FROM table_value
)
WHERE rnk = 1
或使用MAX
分析函数:
SELECT attribute
FROM (
SELECT attribute,
numbers,
MAX(numbers) OVER (PARTITION BY unique_id) AS max_numbers
FROM table_value
)
WHERE numbers = max_numbers;
任一选项将只从表中读取一次。
如果你真的想使用EXISTS
(或IN
(,那么效率会降低,因为你会查询同一个表两次,但你可以使用HAVING
子句:
SELECT tv.attribute
FROM table_value tv
WHERE EXISTS(
SELECT 1
FROM table_value tv1
WHERE tv1.unique_id = tv.unique_id
HAVING MAX(tv1.numbers) = tv.numbers
)
小提琴