gpt4 book ai didi

mysql - 使用 Group BY 通过一个 MySQL 查询获取最小值和最大值

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

我以前在这里看到过类似的问题,但他们似乎都在谈论只获得 Min Max 值。我需要同时获得两者,最好是通过一个查询。我无法理解这在 MySQL 中是如何工作的逻辑。
示例数据

+--------+--------+---------+---------+----------+
|temp_min|temp_max|pressure |condition|dt_txt |
+--------+--------+---------+---------+----------+
|9.27 |9.27 |1021.98 |Rain |2018-05-15|
|8.77 |8.77 |1021.22 |Rain |2018-05-15|
|9.99 |9.99 |1021.31 |Clear |2018-05-15|
|13.86 |13.86 |1021.41 |Clouds |2018-05-15|
|12.39 |12.39 |1019.71 |Rain |2018-05-14|
|13.42 |13.42 |1020.24 |Rain |2018-05-14|
|14.14 |14.14 |1020.41 |Rain |2018-05-14|
|9.01 |9.01 |1018.12 |Rain |2018-05-14|
|13.94 |13.94 |1020.73 |Rain |2018-05-14|
|5.64 |5.64 |1018.42 |Clouds |2018-05-14|
|10.65 |10.65 |1021.8 |Clouds |2018-05-14|
|8.69 |8.69 |1018.91 |Clouds |2018-05-14|
|... |... |... |... |... |
+--------+--------+---------+---------+----------+

逻辑和常识会决定这样的事情:

SELECT 
MIN(`temp_min`) AS `temp_min`,
MAX(`temp_max`) AS `temp_max`,
`dt_txt`,
DAYNAME(`dt_txt`) AS `dayname`,
`pressure`,
`condition`,
`dt_txt`
FROM
infoboard.forecasts
WHERE `dt_txt` >= CURDATE()
GROUP BY `dt_txt`
ORDER BY `dt_txt` ASC;

结果是:

+--------+--------+---------+---------+----------+--------+
|temp_min|temp_max|pressure |condition|dt_txt | |
+--------+--------+---------+---------+----------+--------+
|10.65 |9.01 |1018.12 |Rain |2018-05-14|Monday |
|13.86 |9.99 |1021.98 |Rain |2018-05-15|Tuesday |
+--------+--------+---------+---------+----------+--------+

2018-05-14 最小值应为 8.69,最大值应为 14.14
对于 2018-05-15,最小值应为 8.77,最大值应为 13.42

如何从 temp_* 列中获取实际的最小值和最大值以及驱动正确查询的逻辑是什么?

最佳答案

您似乎将数字 值存储为字符串。你真的应该修复数据。但是,您可以修复查询。在我看来,最简单的方法是隐式转换:

SELECT MIN(`temp_min` + 0) AS `temp_min`,
MAX(`temp_max` + 0) AS `temp_max`,
`dt_txt`, DAYNAME(`dt_txt`) AS `dayname`,
`pressure`, `condition`, `dt_txt`
FROM infoboard.forecasts
WHERE `dt_txt` >= CURDATE()
GROUP BY `dt_txt`
ORDER BY `dt_txt` ASC;

请注意,pressurecondition 不在您的 GROUP BY 中,因此值是从任意行中选择的。这是一种非常糟糕的做法,意味着您的查询几乎无法在任何其他数据库中运行。

您可以通过执行以下操作来修复数据:

alter table infoboard.forecasts
modify column temp_min decimal(6, 3),
modify column temp_max decimal(6, 3);

我怀疑您也想对 pressure 做同样的事情。

关于mysql - 使用 Group BY 通过一个 MySQL 查询获取最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50305984/

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