2011-09-29 86 views
2

一段時間以來一直有這個問題。棘手的「分組」在SQL中排序

我有一個數據庫排序是這樣的:

Car_ID Car_Brand Car_Model Car_Price 
    1  Ford  Fiesta  4000 
    2  Ford  Mustang  29000 
    3  Ford  Focus  12000 
    4  Honda  Civic  15000 
    6  Honda  Jazz   5000 
    7  Toyota  Prius  14000 

我想執行查找那麼最便宜的汽車價格升序訂單同一品牌的汽車,其餘的搜索。

我希望我的輸出是這樣的:

Car_ID Car_Brand Car_Model Car_Price 
    1  Ford  Fiesta  4000 
    3  Ford  Focus  12000 
    2  Ford  Mustang  29000 
    6  Honda  Jazz   5000 
    4  Honda  Civic  15000 
    7  Toyota  Prius  14000 

最便宜的車是福特嘉年華,使得與福特車型的其餘部分按照它直接定購價格。本田然後有第二個最便宜的模型所以爵士和本田的其餘部分,依此類推。

這可能嗎?

+0

我想訂購它,因爲我發佈了它。因此,所有訂購的價格都是按照價格遞增的,但最終按照最便宜的價格按品牌排序,如果你明白我的意思 – penpen

回答

10

什麼,你需要做的就是創建一個包含car_brand和最低的價格爲品牌(我會打電話給brand_price)瞬態數據集,然後加入該數據返回到您的原車表。這將爲您提供額外的信息(品牌價格),您需要對數據進行排序:

SELECT car_id, car_brand, car_model, price FROM cars C1 
    JOIN (select car_brand, MIN(price) AS brand_price FROM cars GROUP BY car_brand) C2 
     ON C1.car_brand = C2.car_brand 
    ORDER BY C2.brand_price, C1.car_brand, C1.price 
+0

+1讓我有兩次嘗試去理解,因此被刪除的註釋 – LesterDove

+1

+1使用窗口函數會多容易! '選擇car_id,car_brand,car_model,價格從汽車ORDER BY MIN(價格)OVER(PARTITION BY car_brand),car_brand,price'。哦,好吧... –

+0

謝謝。這似乎與一些調整工作,以匹配我的真實數據庫,非常感謝! – penpen

-2

我想你一定能夠做到這一點與下面的查詢

SELECT Car_ID, Car_Brand, Car_Model, Car_Price 
FROM tblcars 
ORDER BY Car_Price, Car_Brand 

,除非我錯過了什麼

+0

它們也應該按品牌分組。 – Rasika

-2
select * from cars order by Car_Price, Car_Brand ASC 
1

我會被分價格做的Car_Brand順序分組一分鐘,然後按排序的car_brand和價格進行排序。我會看看是否可以爲此完成查詢。

+0

@Larry Lustig打敗了我。 – Rasika

2

像這樣的東西應該工作:

SELECT a.* 
FROM Cars a 
    LEFT JOIN (
    SELECT Car_Brand, MIN(Car_Price) AS MinPrice 
    FROM Cars 
    GROUP BY Car_Brand 
) b ON a.Car_Brand = b.Car_Brand 
ORDER BY b.MinPrice, a.Car_Price 
+1

+1,儘管我可能會使用INNER JOIN而不是LEFT JOIN。仍然都應該工作好。 –

+0

格式化@Andriy的歡呼 - 是在我的手機上完成的。 :) – mwan