【问题标题】:What happens when ORDER BY is given a number?给 ORDER BY 一个数字时会发生什么?
【发布时间】:2011-08-12 02:25:34
【问题描述】:

我刚开始学习MySQL,正在看的书有以下例子:

SELECT last_name, first_name, birth FROM president
ORDER BY IF(birth IS NULL,0,1), birth DESC;

我想知道的是这些数字(0 和 1)如何影响 ORDER BY 的行为——当你给 ORDER BY 一个数字时,它有什么作用?

我发现的一个提示是随机排序是通过以下方式完成的:

SELECT * from TABLE ORDER BY rand();

但我仍然不知道它为什么有效。

【问题讨论】:

  • 就个人而言,我更喜欢 ASCENDING 死亡而不是 DESCENDING 死亡。听说下面有点热口哨
  • 按那个数字排序?我不明白你在哪里对此感到困惑。
  • JohnFX,文档(和书)说 ORDER BY 有两个参数,DESC 和 ASC。没有给出其他语法的解释(给定数字的 ORDER BY)。这就是我感到困惑的原因。
  • glowcoder,把它改成出生,这样听起来不那么病态。

标签: mysql sql-order-by


【解决方案1】:

它对数据进行排序,以便IF(birth IS NULL, 0, 1) 返回 0 的行出现在它返回 1 的行之前。

您可能会注意到,这与您编写时发生的情况完全不同:

ORDER BY 1;

在这种情况下,它按结果列表中的第一列排序。这是过时的语法,但仍然是 SQL 标准所要求的。

【讨论】:

  • 我明白了,所以它作为一种用户定义的排序机制,与 DESC 和 ASC 分开。我说的对吗?
  • @Ikram:不是一个单独的机制——它只是意味着(因为你省略了 DESC)第一个 ORDER BY 列中的数据按升序排列,零在一个之前,就像任何其他列一样将是;然后,在一个组(0 或 1)中,第二个值(死亡)以降序控制绑定行的顺序。
  • 感谢您的解释。仍然不确定我是否做对了。有没有什么地方可以阅读 ORDER BY 工作原理的技术细节?
  • @Jonathan 我找到了another question,提问者说:“我一直认为,当您在表上执行 ORDER BY RAND() 时,MySQL 会向表中添加一个新列,该列填充随机值,然后按该列对数据进行排序。”这对我来说是有道理的,但我不知道它是否正确。
  • @Ikram:这是正确的。您可以在dev.mysql.com/doc/refman/5.5/en/select.html阅读有关 ORDER BY 的信息。
猜你喜欢
  • 2017-01-20
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 2011-10-18
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多