表中的记录如下:
user score label
----------------------------------------------
userA 2 apple
userA 2 banana
userB 5 cat
userB 5 dog
对于不同的行,如果用户和分数相同,只需要获得唯一的用户和分数,任何标签都可以。
上面的预期查询结果是一个例子,可以是下面的任何一个:
user score label
----------------------------------------------
userA 2 apple
userB 5 cat
或
user score label
----------------------------------------------
userA 2 banana
userB 5 cat
或
user score label
----------------------------------------------
userA 2 apple
userB 5 dog
或
user score label
----------------------------------------------
userA 2 banana
userB 5 dog
如果任何标签都很好,我认为最简单的方法是使用聚合函数,如min或max——
SELECT user, score, max(label) as label
FROM table
GROUP BY user, score
您可以使用窗口函数:
select * from
(
select * , row_number() over (partition by user,score order by label) rn
from tablename
) t
where t.rn = 1;