select 每个ID的最大值(包括一个ID可能有多个最大值!)
select max value for each ID (including the possibility of multiple max values for one ID!)
我有一个 table 假设有一个 ID 和一个分数。我想为每个 ID 获得最高分数。但可能会发生我对一个 ID 有相同分数的情况,在这种情况下我想同时拥有这两个值。假设我有一个 table
ID score
1 10
1 10
2 8
2 6
我想有结果
ID score
1 10
1 10
2 8
这将是
的组合
SELECT ID, max(score) FROM tbl GROUP BY ID, score ORDER BY ID
和
select * from tbl where score = (select max (score) from tbl)
我试过了
select * from tbl where score = (select max (score) from tbl GROUP BY ID)
当然它说我在一个子查询中有多行。我想要那些多行我不想将其限制为 1.
我试过了
SELECT * FROM tbl AS tbl1
JOIN
(select * from tbl where score = (select max (score) from tbl))
ON tbl1.ID=tbl.ID
但是它说 "subquery in FROM must have an alias" 我给所有子查询都设置了别名,但我仍然有这个错误。
一种方法是使用 CTE:
WITH themaxes AS
(SELECT id, max(score) AS maxscore FROM tbl GROUP BY ID)
SELECT t.* FROM tbl t INNER JOIN themaxes m ON m.id = t.id AND m.maxscore = t.score;
另一种方法是使用 window function(此示例使用带别名的子查询):
SELECT id,score FROM
(SELECT rank() OVER (PARTITION BY id ORDER BY score DESC) AS therank, * FROM tbl) t
WHERE therank = 1
我有一个 table 假设有一个 ID 和一个分数。我想为每个 ID 获得最高分数。但可能会发生我对一个 ID 有相同分数的情况,在这种情况下我想同时拥有这两个值。假设我有一个 table
ID score
1 10
1 10
2 8
2 6
我想有结果
ID score
1 10
1 10
2 8
这将是
的组合 SELECT ID, max(score) FROM tbl GROUP BY ID, score ORDER BY ID
和
select * from tbl where score = (select max (score) from tbl)
我试过了
select * from tbl where score = (select max (score) from tbl GROUP BY ID)
当然它说我在一个子查询中有多行。我想要那些多行我不想将其限制为 1.
我试过了
SELECT * FROM tbl AS tbl1
JOIN
(select * from tbl where score = (select max (score) from tbl))
ON tbl1.ID=tbl.ID
但是它说 "subquery in FROM must have an alias" 我给所有子查询都设置了别名,但我仍然有这个错误。
一种方法是使用 CTE:
WITH themaxes AS
(SELECT id, max(score) AS maxscore FROM tbl GROUP BY ID)
SELECT t.* FROM tbl t INNER JOIN themaxes m ON m.id = t.id AND m.maxscore = t.score;
另一种方法是使用 window function(此示例使用带别名的子查询):
SELECT id,score FROM
(SELECT rank() OVER (PARTITION BY id ORDER BY score DESC) AS therank, * FROM tbl) t
WHERE therank = 1