2012-09-24 81 views
2

我的數據庫結構包含列:id, name, value, dealer。我想檢索最低value的行每個dealer。我一直試圖搞砸MIN()GROUP BY,仍然 - 沒有解決方案。MySQL - 獲取最低值

+1

在哪裏查詢? – Hkachhia

+0

你究竟試過了什麼?通過發佈你的代碼,你可以更好地表明你已經付出了一些努力來解決問題,也許有人會指出你可能犯的錯誤。 - 在你問題的現狀中,你只是要求爲你做你的工作。 - 其實你只是宣佈你解決不了問題,甚至沒有求助...... –

+0

我的方法很簡單和錯誤:像SELECT MIN(value),經銷商FROM table_name GROUP BY經銷商;' - 我知道該解決方案是其他地方,所以代碼會誤導。 – acid

回答

8

解決方法1:

SELECT t1.* FROM your_table t1 
JOIN (
    SELECT MIN(value) AS min_value, dealer 
    FROM your_table 
    GROUP BY dealer 
) AS t2 ON t1.dealer = t2.dealer AND t1.value = t2.min_value 

溶液2:

SELECT t1.* FROM your_table t1 
LEFT JOIN your_table t2 
ON t1.dealer = t2.dealer AND t1.value > t2.value 
WHERE t2.value IS NULL 

這個問題是非常有名的,所以這一個特殊的頁面在MySQL手冊。

檢查:Rows Holding the Group-wise Maximum/Minimum of a Certain Column

+0

如果經銷商A的值爲1,2,3,而經銷商B的值爲2,3,4,那該怎麼辦?對於經銷商A,您的查詢將返回1和2的行。 – WojtusJ

+0

@WojtusJ不,不會,再次檢查查詢。 – xdazz

+0

我的評論是第一次修改你的答案,沒有「經銷商」條件。 :-)現在我可以看到你編輯了它,它是正確的 - 事實上,它和我的答案是一樣的。 ;-) – WojtusJ

4
select id,name,MIN(value) as pkvalue,dealer from TABLENAME 
group by id,name,dealer; 

在這裏您將所有行按ID,名稱,經銷商分組,然後您將獲得最小值作爲pkvalue。

+0

op需要每個經銷商的最低價值。 – xdazz

+0

這不是OP真正想要的,如果你有兩個經銷商相同但價值不同,名稱和ID不同的行,則OP要求價值較低的行,你的查詢將返回兩行。 – WojtusJ

0

嘗試以下操作:

SELECT dealer, MIN(value) as "Lowest value" 
FROM value 
GROUP BY dealer; 
1
SELECT MIN(value),dealer FROM table_name GROUP BY dealer; 
0

首先,你需要解決每一個經銷商的最低值,然後檢索具有用於該值的行特定經銷商。我會做這樣:

SELECT a.* 
FROM your_table AS a 
     JOIN (SELECT dealer, 
        Min(value) AS m 
      FROM your_table 
      GROUP BY dealer) AS b 
     ON (a.dealer= b.dealer 
       AND a.value = b.m) 
0
select id, name, value, dealer from yourtable where dealer 
in(select min(dealer) from yourtable group by name, value)