2011-11-24 57 views
4

樣品臺如何使用MIN()函數

id | name | price | 
----------------------- 
1 | john | 300 | 
----------------------- 
2 | michael | 400 | 
----------------------- 
3 | michelle | 250 | 
----------------------- 

我會使用此查詢

SELECT id, name, MIN(price) FROM table 

結果將得到表中最小的數字來獲得數量最少的id在mysql中成爲這個:

_______________________ 
id | name | price | 
----------------------- 
1 | michelle | 250 | 

我想要的結果會變成這樣:

id | name | price | 
----------------------- 
3 | michelle | 250 | 
----------------------- 

在此先感謝!

+5

順便說一句,您的示例數據集中的最低價格是200,但您期望的輸出使用250的價格。這是一個錯誤,還是我不完全明白你想要什麼? –

+1

我會upvote這個問題,除了你的預期輸出不符合你問的問題。 (你要求'MIN'價格,但是顯示其他東西的輸出,這是沒有意義的。) –

+0

對不起,我寫了一個錯誤的值id 2應該是400.謝謝你的建議。 – Nejimz

回答

1

這樣做;

 
SELECT id, name, price FROM table order by price ASC LIMIT 1 

希望它可以幫助

+0

謝謝Sudhir我會試試這個。 – Nejimz

4

使用子查詢:

SELECT id, name, price 
FROM table 
WHERE price = (SELECT min(price) FROM table); 

如果沒有LIMIT 1,這可以返回多個行時,都有着相同的最低價格。這可能是也可能不是你想要的,而不是在匹配記錄中進行任意選擇。

+0

它應該是'PRICE =',而不是'PRICE IN',因爲你試圖匹配單行。 –

+0

@KenWhite謝謝。 –

7

得到最小號碼的ID最簡單的方法是這樣的:

SELECT Id, name, price 
FROM sampleTable 
ORDER BY price ASC 
LIMIT 1; 

如果你想使用MIN(作爲標題狀態),這樣做會是這樣一種方法:

SELECT id, name, price 
FROM sampleTable 
WHERE price = (SELECT MIN(price) from sampleTable) 
+1

+1。好的答案涵蓋了兩個基地。 –

+0

感謝M_M這個查詢。我更喜歡使用第一個查詢,因爲我也需要獲得最小的價格和ID。 – Nejimz

3

對於此查詢,你不需要MIN,但可以使用ORDER BYLIMIT

SELECT id, name, price 
FROM Table 
ORDER BY Price ASC 
LIMIT 1 
3

我做這種方式:

SELECT t1.id, t1.name, t1.price 
FROM sampleTable AS t1 
LEFT OUTER JOIN sampleTable AS t2 
    ON t1.price > t2.price 
WHERE t2.id IS NULL 

換句話說,尋找具有較低的價格比列T1一列T2。如果沒有找到這樣的第t2行,那麼外部聯接會產生t2。* NULL,如果是,那麼t1必須具有最小的價格。

這被稱爲排除加入它通常比MySQL中的子查詢執行得更好。

+1

+1我以前沒有見過這個,很好的方法 –