gpt4 book ai didi

mysql - 以下情况如何实现mysql order by

转载 作者:行者123 更新时间:2023-11-29 02:09:42 25 4
gpt4 key购买 nike

有 2 个表 - Person(personName, areaId, birthDate) 和 Area(areaId, areaCode)。现在我想要一个带有 areaCode 的人员列表,这样来自 areaCode 的所有人员都列在一起,并且最老的 areaCode 应该是第一个出现的 areaCode。我如何通过 mysql 查询实现这一点?

我尝试过对多个列使用 ORDER BY,但没有成功。

SELECT P.personName, A.areaCode, P.birthDate
FROM Person P
JOIN Area A ON P.areaId = A.areaId
ORDER BY P.birthDate, A.areaCode

假设有Area1和Area2。 Area2 有最年长和最新出生的人。因此,Area2 记录应该首先出现。

更新:我设法解决了这个问题,但是有什么办法可以缩短这段代码。

SELECT * 
FROM (SELECT DISTINCT
A.areaCode,
MIN(P.birthDate)
FROM Area A
JOIN Person P on P.areaId = A.areaId
GROUP BY A.areaCode
ORDER BY P.birthDate) T1
JOIN (SELECT DISTINCT
P.personName,
A.areaCode,
P.birthDate
FROM Area A
JOIN Person P on P.areaId = A.areaId
ORDER BY P.createdTimestamp) T2 ON T1.barcode = T2.binId;

最佳答案

您从一个子查询开始,以获取每个区号中最早的生日。

                       SELECT A.areaId, MIN(birthDate) earliestBirthDate
FROM Area A
JOIN Person P ON A.areaId = p.areaId
GROUP BY A.areaId

您可以尝试使用此子查询来说服自己它为每个 areaId 生成一行,显示所需的最早出生日期。

然后您将子查询加入您的详细查询

SELECT P.personName, A.areaCode, P.birthDate
FROM Person P
JOIN Area A ON P.areaId = A.areaId
JOIN (
SELECT A.areaId, MIN(birthDate) earliestBirthDate
FROM Area A
JOIN Person P ON A.areaId = p.areaId
GROUP BY A.areaId
) EARLY ON P.areaId = EARLY.areaID
ORDER BY EARLY.earliestBirthDate, P.birthDate, A.areaCode

诀窍是使用子查询来创建一个虚拟表,这样您就可以对该表的列进行排序。

专业提示:如果您发现自己使用 SELECT DISTINCT 从表中检索详细数据,这是一个警告标志。你可能做错了什么。

关于mysql - 以下情况如何实现mysql order by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55982708/

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