Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获得;“高分”;分数表中的表格_Sql_Oracle - Fatal编程技术网

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

我有下面的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 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

谢谢你的回答,但我想我可能把问题简化得太多了。有没有办法返回整行?例如,假设我有一个日期列,这样玩家就可以看到他们什么时候得到了分数。