我想要一條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