gpt4 book ai didi

mysql - 在查询中多次使用查询结果

转载 作者:行者123 更新时间:2023-11-29 11:44:55 27 4
gpt4 key购买 nike

假设我每个用户有一个表,用于计算一年中一个月的 SO 声誉。

+-----+-------+------+
| rep | month | year |
+-----+-------+------+
| 10 | 12 | 2015 |
+-----+-------+------+
| 11 | 01 | 2016 |
+-----+-------+------+
| 12 | 02 | 2016 |
+-----+-------+------+

现在,为了将数据显示到表格中,我希望该用户的起始年份、起始月份、结束年份和结束月份相应地缩放图表。

我的第一个想法是这样的 sql 请求:

SELECT MAX(YEAR) AS maxYear,
MAX(MONTH) AS maxMonth,
MIN(YEAR) AS minYear,
MIN(MONTH) AS minMonth
FROM Balance

但这只是因为我从 2015 年开始才有效;-)。新年开始后,它显示了错误的结果:它将一月标记为第一个月,因为查询没有查看该月份是否对应于正确的年份。

所以我创建了这个:

SELECT MAX(YEAR) AS maxYear,
MAX(monthsOfMaxYear) AS maxMonth,
MIN(YEAR) AS minYear,
MIN(monthsOfMinYear) AS minMonth
FROM Balance,

(SELECT MONTH AS monthsOfMaxYear
FROM Balance
WHERE YEAR =
(SELECT MAX(YEAR)
FROM Balance)) AS a,

(SELECT MONTH AS monthsOfMinYear
FROM Balance
WHERE YEAR =
(SELECT MIN(YEAR)
FROM Balance)) AS b

但我对此并不满意,因为查询被执行了多次,例如从余额中选择最小值(年份)

有更好的解决方案吗?

最佳答案

答案很简单:你不能将月份与年份分开来看。因此,将两者从年份开始组合起来,以获得正确的排序顺序:例如12/2015 = 201512。即:将年份乘以 100 再加上月份。要再次提取月份,请对其取模 100:

SELECT MAX(YEAR) AS maxYear,
MAX(YEAR * 100 + MONTH) % 100 AS maxMonth,
MIN(YEAR) AS minYear,
MIN(YEAR * 100 + MONTH) % 100 AS minMonth
FROM Balance

关于mysql - 在查询中多次使用查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35126403/

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