Sql 获得;“高分”;分数表中的表格
我有下面的sql表设置,用于跟踪不同玩家的分数Sql 获得;“高分”;分数表中的表格,sql,oracle,Sql,Oracle,我有下面的sql表设置,用于跟踪不同玩家的分数 create table scoreTable ( userName varchar2(100), score number ) / insert into scoreTable values ('Andy', 200); insert into scoreTable values ('Andy', 33); insert into scoreTable values ('Bob', 444); insert into scoreTable
create table scoreTable (
userName varchar2(100),
score number
)
/
insert into scoreTable values ('Andy', 200);
insert into scoreTable values ('Andy', 33);
insert into scoreTable values ('Bob', 444);
insert into scoreTable values ('Charlie', 213);
insert into scoreTable values ('Charlie', 4);
insert into scoreTable values ('Charlie', 777);
现在我想用select语句返回每个玩家的最高分数。我希望结果是
NAME SCORE
_____ ____
Andy 200
Bob 444
Charlie 777
我更喜欢只使用一个select语句,它为任意数量的不同名称值提供最高结果。这可能吗
这可能吗
是。
简单聚合:
SELECT userName, MAX(score) AS score
FROM scoreTable
GROUP BY userName
ORDER BY userName;
编辑:
使用RANK
函数返回整行:
WITH cte AS
(
SELECT *, RANK() OVER(PARTITION BY userName ORDER BY score DESC) AS rn
FROM scoreTable
)
SELECT *
FROM cte
WHERE rn = 1
ORDER BY userName;
或使用自联接:
SELECT s1.*
FROM scoreTable s1
LEFT JOIN scoreTable s2
ON s1.userName = s2.userName
AND s1.score < s2.score
WHERE s2.userName IS NULL
ORDER BY userName;
选择s1*
从评分表s1
左联接表s2
在s1.userName=s2.userName上
s1.score
谢谢你的回答,但我想我可能把问题简化得太多了。有没有办法返回整行?例如,假设我有一个日期列,这样玩家就可以看到他们什么时候得到了分数。