繁体   English   中英

SQL中棘手的“分组”排序

[英]Tricky “grouped” ordering in 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

最便宜的车是福特嘉年华,所以其他福特车型按照价格直接订购。 然后本田拥有第二个最便宜的车型,所以爵士乐和其他本田车队紧随其后。

这可能吗?

您需要做的是创建一个瞬态数据集,其中包含car_brand和该品牌的最低价格(我将其称为brand_price),然后将该数据加入到原始汽车表中。 这将为您提供排序数据所需的额外信息(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

这样的事情应该有效:

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

我会按照最低价格按Car_Brand顺序进行分组,然后按分类的car_brand和价格进行订购。 我会看看我是否可以为此完成查询。

我想你可以用以下查询来做到这一点

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

除非我错过了什么

select * from cars order by  Car_Price, Car_Brand ASC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM