gpt4 book ai didi

sql - MySQL:ORDER BY 未按预期工作。正确排序一些行

转载 作者:行者123 更新时间:2023-11-29 01:47:06 26 4
gpt4 key购买 nike

我对 MySQL 没有太多经验,所以我不确定在问这个问题时应该包含哪些信息。如果我遗漏了相关的内容,请发表评论。我会及时补充的。

我有这个问题:

SELECT 
Log_Analysis_RecordsToSesions_dalhousie.sessionID,
(TIMEDIFF(
MAX(Log_Analysis_Records_dalhousie.date),
MIN(Log_Analysis_Records_dalhousie.date)
)) as NewSessionLength
FROM
Log_Analysis_RecordsToSesions_dalhousie,
Log_Analysis_Records_dalhousie
WHERE
Log_Analysis_RecordsToSesions_dalhousie.recordID=Log_Analysis_Records_dalhousie.recordID
GROUP BY
sessionID;

返回这个:

+-----------+---------------+
| sessionID | SessionLength |
+-----------+---------------+
| 1 | 00:20:31 |
| 2 | 00:19:54 |
| 3 | 00:04:01 |
| 4 | 00:14:02 |
| 5 | 00:02:16 |
| 6 | 00:16:25 |
| 7 | 00:00:00 |
| 8 | 00:00:00 |
| 9 | 00:00:00 |
| 10 | 00:26:35 |
| 11 | 00:11:28 |
| 12 | 00:00:00 |
| 13 | 00:00:00 |
| 14 | 00:11:03 |
...
| 7978 | 00:00:03 |
| 7979 | 00:00:15 |
| 7980 | 00:00:00 |
| 7981 | 00:00:00 |
+-----------+---------------+
7981 rows in set (0.92 sec)

当我追加

ORDER BY
NewSessionLength;

对于查询,它主要是对其进行排序,但并未使其 100% 正确。 大多数 大值放在表的末尾,大多数 小值放在表的开头。我不知道是什么原因造成的。

例如:

+-----------+------------------+
| sessionID | NewSessionLength |
+-----------+------------------+
| 4285 | 00:00:00 |
| 1565 | 00:00:00 |
| 7604 | 00:00:02 |
| 4317 | 00:00:02 |
| 1597 | 00:00:02 |
| 7636 | 00:00:01 |
| 4349 | 00:18:17 | // <-------------- Out of order
| 1629 | 00:00:09 |
...
| 2829 | 04:28:01 |
| 377 | 04:25:23 | // <-------------- Out of the order
| 5631 | 05:37:25 |
| 18 | 05:05:31 |
| 1545 | 07:01:31 |
| 7536 | 07:09:59 |
| 5237 | 10:07:29 |
| 250 | 90:42:30 |
+-----------+------------------+
7981 rows in set (0.94 sec)

最佳答案

在 MySQL 5.0.50 版中存在一个错误 (#32202),其中 ORDER BY 在与 GROUP BY 一起使用时无法正常工作。这已在较新的版本中修复,但您可能想尝试以下操作以查看您的 MySQL 版本是否“有问题”:

CREATE TABLE a (id int auto_increment primary key, sorter char(5));
INSERT INTO a VALUES (1, 'z'), (2, 'x'), (3, 'a'), (4, 'z');
SELECT * FROM a GROUP BY id ORDER BY sorter;

如果您得到的结果集不是按sorter 字段排序的,那么您可能要考虑升级您的数据库服务器。

如果无法升级,有一个简单的解决方法可以解决上述问题:

SELECT * FROM ( SELECT * FROM a GROUP BY id ) b ORDER BY sorter;

...在您的情况下应该是以下内容:

SELECT * FROM 
(
SELECT
Log_Analysis_RecordsToSesions_dalhousie.sessionID,
(TIMEDIFF(
MAX(Log_Analysis_Records_dalhousie.date),
MIN(Log_Analysis_Records_dalhousie.date)
)) as NewSessionLength
FROM
Log_Analysis_RecordsToSesions_dalhousie,
Log_Analysis_Records_dalhousie
WHERE
Log_Analysis_RecordsToSesions_dalhousie.recordID =
Log_Analysis_Records_dalhousie.recordID
GROUP BY
sessionID
) dt
ORDER BY NewSessionLength;

关于sql - MySQL:ORDER BY 未按预期工作。正确排序一些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179599/

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