首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql如何对具有相同值的行进行排序?

问mysql如何对具有相同值的行进行排序?
EN

Stack Overflow用户
提问于 2011-07-12 18:35:21
回答 5查看 15.7K关注 0票数 22

在我的数据库中,我有一些按包含相同值的列进行排序的记录:

代码语言:javascript
复制
| col1 | timestamp              |
| row1 | 2011-07-01 00:00:00    |
| row2 | 2011-07-01 00:00:00    |
| row3 | 2011-07-01 00:00:00    |

SELECT ... ORDER BY timestamp

看起来结果是随机排列的。随机顺序是否一致?我把这些数据放在两台mysql服务器上,我能期待同样的结果吗?

EN

回答 5

Stack Overflow用户

发布于 2011-07-12 18:39:57

我建议不要做这样的假设。在标准SQL中,显式ORDER BY子句不需要的任何内容都依赖于实现。

我不能为MySQL说话,但在SQL Server上,就ORDER BY而言“相等”的行的输出顺序可能会在每次查询运行时发生变化-并且可能受到几乎任何东西的影响(例如,服务器的补丁/服务包级别、工作负载、当前在缓冲池中的页面等)。

因此,如果您需要特定的订单,您可以做的最好的事情(既可以保证它,也可以为将来的维护人员记录您的查询)是显式地请求您想要的订单。

票数 12
EN

Stack Overflow用户

发布于 2013-08-16 21:26:38

答案已经很多了,但底线答案是NO。

如果希望以特定的顺序一致地返回行,则在ORDER BY中指定该顺序。否则,绝对不能保证返回的行将按什么顺序进行。

我认为您可能遗漏的是,ORDER BY子句中可能列出了多个表达式。您还可以包含不在选择列表中的表达式。

例如,在您的示例中,您可以使用ORDER BY timestamp, id。

(或其他一些列或表达式。)

这将首先对时间戳上的行进行排序,然后任何具有相同时间戳值的行都将按id或此列表中的下一个表达式进行排序。

票数 8
EN

Stack Overflow用户

发布于 2016-05-25 18:53:07

答案是:不,顺序不会一致。我遇到了同样的问题,并通过向order部分添加另一个列来解决它。请确保此列对于每个记录都是唯一的,如“ID”或其他任何值。

在这种情况下,您必须将“ID”字段添加到表中,该字段对于每条记录都是唯一的。你可以给它分配'AI‘(自动递增),这样你就不需要处理维护了。

添加'ID‘列后,更新查询的最后一部分,如下所示:

代码语言:javascript
复制
SELECT mt.*
FROM my_table mt
ORDER BY mt.timestamp ASC, mt.id DESC
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6662837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档