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 )
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;
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
)
2条答案
按热度按时间c3frrgcw1#
我不确定
exists
在这里是否有帮助,因为正如您所说的那样,每个unique_id
都有许多numbers
值,并且您希望为该特定unique_id
选择最高numbers
的属性。exists
是有用的,当你想要检查的东西是否…嗯,存在,但这里不是这样的。h43kikqp2#
您不需要
EXISTS
,而可以使用RANK
或DENSE_RANK
分析函数:或者使用
MAX
分析函数:这两个选项都只能从表中读取一次。
如果您确实想使用
EXISTS
(或IN
),则效率会较低,因为您将查询同一个表两次,但您可以使用HAVING
子句:fiddle