一尘不染

SQL中棘手的“路由”排序

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

最便宜的汽车是福特嘉年华(Forest
Fiesta),因此,其余福特车型都按照价格直接订购。然后,本田拥有第二便宜的车型,因此爵士车和其他本田车紧随其后,依此类推。

这可能吗?


阅读 183

收藏
2021-03-08

共1个答案

一尘不染

您需要做的是创建一个瞬态数据集,该数据集包含car_brand和该品牌的最低价格(我将其称为brand_price),然后将数据联接回到原始的car表中。这将为您提供对数据进行排序所需的其他信息(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
2021-03-08