gpt4 book ai didi

mysql 多个 ORDER BY 麻烦从同一个表自联接

转载 作者:行者123 更新时间:2023-11-30 00:34:52 24 4
gpt4 key购买 nike

我将首先以句子形式表达,然后以数据形式表达。

我想在句子中做什么:“显示按最近发布新车的三个汽车制造商排序,以及这些制造商生产的所有汽车。”

所以我希望数据是这样的:

Ford, ModelA, 2012
Ford, ModelG, 2008
Toyota, ModelH, 2011
Toyota, ModelJ, 2009
Honda, ModelN, 2010
Hondda, ModelK, 2007

我的问题是,当我尝试按制造商将它们一起订购时,它会撤消按发布日期进行的订购。

Ford, ModelA, 2012
Ford, ModelG, 2008
Honda, ModelN, 2010 <--wrong, Toyota should go here
Hondda, ModelK, 2007
Toyota, ModelH, 2011
Toyota, ModelJ, 2009

如果我在获得发布日期后不尝试按制造商一起订购它们,我得到的行是无序连接的,具体取决于它们在数据库中的排序方式。

Ford, ModelA, 2012
Honda, ModelN, 2010<--wrong, want to finish Fords before moving to next latest release
Ford, ModelG, 2008
Hondda, ModelK, 2007
Toyota, ModelH, 2011
Toyota, ModelJ, 2009

我在子查询上尝试了 INNER JOIN 的各种尝试,例如,

SELECT * FROM cars 
INNER JOIN (SELECT m.manufactuer
FROM cars AS m
ORDER BY m.year DESC LIMIT 3) subq
ON cars.manufacturer=subq.object
ORDER BY cars.manufacturer

(其他一些尝试还不够,因为 LIMIT 不能用于所有类型的子查询)。

我愿意将其分成多个查询。

+---------------+---------+--------+
|manufacturer | model | year |
|---------------|---------|--------|
|ford |modelA |2008 |
|toyota | modelS |2010 |

编辑:

kordirko 的答案和我的一些变体,以正确的顺序返回制造商,但年份被子查询匹配覆盖。所以它会产生类似的东西

Ford, ModelA, 2012
Ford, ModelG, 2012<--
Honda, ModelN, 2010
Hondda, ModelK, 2010<--
Toyota, ModelH, 2011
Toyota, ModelJ, 2011<-- wrong, need it to show actual year of model, not year from match of the most recent

解决方案

RIGHT JOIN 似乎提供了一个可用的解决方案:

SELECT cars.manufacturer, cars.year FROM cars 
RIGHT JOIN (SELECT m.manufacturer FROM cars AS m ORDER BY m.year DESC LIMIT 3) subq
ON cars.manufacturer=subq.manufacturer

尚未对其进行全面严格的测试,但在粗略测试中似乎可以正常工作。

最佳答案

尝试:

SELECT c.manufactuer,
c.model,
c.year,
s.year As most_recent_year
FROM cars c
INNER JOIN (
SELECT m.manufactuer, max(m.year) year
FROM cars AS m
GROUP BY m.manufactuer
ORDER BY year DESC LIMIT 3
) s
ON c.manufactuer=s.manufactuer
ORDER BY s.year DESC, c.year DESC

演示:http://sqlfiddle.com/#!2/fac25/2

关于mysql 多个 ORDER BY 麻烦从同一个表自联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22261844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com