gpt4 book ai didi

mysql - 使用 SQL 对某些行进行平均排序

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

好吧,这是对所有 SQL 专业人员的挑战:我有一个表,其中有两列兴趣,组和生日。只有某些行分配有组。我现在想要打印按生日排序的所有行,但我也希望具有同一组的所有行最终彼此相邻。执行此操作的唯一半明智的方法是在排序时使用组中所有行的平均出生日期。问题是,这可以用纯 SQL(本例中为 MySQL)来完成,还是需要一些脚本逻辑?

为了说明这一点,用给定的表格:

id | group | birthdate
---+-------+-----------
1 | 1 | 1989-12-07
2 | NULL | 1990-03-14
3 | 1 | 1987-05-25
4 | NULL | 1985-09-29
5 | NULL | 1988-11-11

假设 1987-05-25 和 1989-12-07 的“平均值”是 1988-08-30(这可以通过对日期的 UNIX 时间戳等效值进行平均,然后转换回日期来找到) .这个平均值不一定是完全正确的!)。输出应该是:

id | group | birthdate  | [sort_by_birthdate]
---+-------+------------+--------------------
4 | NULL | 1985-09-29 | 1985-09-29
3 | 1 | 1987-05-25 | 1988-08-30
1 | 1 | 1989-12-07 | 1988-08-30
5 | NULL | 1988-11-11 | 1988-11-11
2 | NULL | 1990-03-14 | 1990-03-14

有什么想法吗?

干杯,乔恩

最佳答案

我通常使用 T-SQL 进行编程,所以如果我没有将日期函数完美地转换为 MySQL,请原谅我:

SELECT
T.id,
T.group
FROM
Some_Table T
LEFT OUTER JOIN (
SELECT
group,
'1970-01-01' +
INTERVAL AVG(DATEDIFF('1970-01-01', birthdate)) DAY AS avg_birthdate
FROM
Some_Table T2
GROUP BY
group
) SQ ON SQ.group = T.group
ORDER BY
COALESCE(SQ.avg_birthdate, T.birthdate),
T.group

关于mysql - 使用 SQL 对某些行进行平均排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6697686/

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