我想要一条SQL语句来获取具有最小值的行。用于选择具有最小值的不同行的SQL查询
考虑一下这个表:
id game point
1 x 5
1 z 4
2 y 6
3 x 2
3 y 5
3 z 8
如何选择具有在point
列最小值的ID,并以游戏分组?就像这样:
id game point
1 z 4
2 y 6
3 x 2
我想要一条SQL语句来获取具有最小值的行。用于选择具有最小值的不同行的SQL查询
考虑一下这个表:
id game point
1 x 5
1 z 4
2 y 6
3 x 2
3 y 5
3 z 8
如何选择具有在point
列最小值的ID,并以游戏分组?就像这样:
id game point
1 z 4
2 y 6
3 x 2
用途:
Select tbl.* From TableName tbl
Inner Join
(
Select Id,MIN(Point) MinPoint From TableName Group By Id
)tbl1
On tbl1.id=tbl.id
Where tbl1.MinPoint=tbl.Point
Ken Clark's answer并没有我的情况下工作。它可能无法在你的工作。如果没有,试试这个:
SELECT *
from table T
INNER JOIN
(
select id, MIN(point) MinPoint
from table T
group by AccountId
) NewT on T.id = NewT.id and T.point = NewT.MinPoint
ORDER BY game desc
SELECT * from room
INNER JOIN
(
select DISTINCT hotelNo, MIN(price) MinPrice
from room
Group by hotelNo
) NewT
on room.hotelNo = NewT.hotelNo and room.price = NewT.MinPrice;
简短的解释如何这个代码回答这个问题将大大改善这个答案 – jmoreno 2015-09-27 04:12:38
由于这是标有sql
只,下面是一个使用ANSI SQL和window function:
select id, game, point
from (
select id, game, point,
row_number() over (partition by game order by point) as rn
from games
) t
where rn = 1;
这是做同样的事情的另一种方式,这将允许你做有趣的事情,如选择前5名的获胜游戏等。
SELECT *
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Point) as RowNum, *
FROM Table
) X
WHERE RowNum = 1
您现在可以正确地获得被确定为具有最低分数的实际行,并且您可以修改排序功能以使用多个条件,例如“显示具有最小分数的最早游戏”等。
好和短。利用窗口函数。 – absurd 2016-05-17 10:34:35
你需要加入同一张表才能得到想要的结果。在答案中检查下面的查询。 – 2013-03-08 10:51:32
为什么游戏“y”在结果中指向的值是6而不是5? – billynoah 2014-08-20 19:40:59
由于OP没有回应,我只能假设他打算问“按ID分组”,并显示哪个游戏有最低分数... – 2015-04-08 16:20:07