MySQL ORDER BY 偏移量

Posted

技术标签:

【中文标题】MySQL ORDER BY 偏移量【英文标题】:MySQL ORDER BY offset 【发布时间】:2010-04-26 12:22:34 【问题描述】:

mysql 查询中我将如何选择:

所有行,按列排序name name > 'f' 应在前,其余按字母顺序排列

所以我会得到G, H, …, X, Y, Z, A, B, C …, F

【问题讨论】:

不 - 我 35 岁,有孩子 ;) 【参考方案1】:
SELECT 
  * 
FROM
  mytable 
ORDER BY
  CASE WHEN name > 'F' THEN 0 ELSE 1 END,
  name

【讨论】:

有趣...我不知道您可以通过不是查询结果列的函数进行排序。我打算选择 IF( name >= 'F', 0, 1 ) 作为 PreSort 并使用 THAT 作为 OrderBy 子句 谢谢 :) 非常有趣的解决方案 @monk.e.boy:在 MySQL 中,比较直接得出01。这意味着您可以摆脱CASE 并执行ORDER BY name < 'G', name,但我发现这不太直观(并且与其他SQL 方言不兼容)。 @Tomalak,同意,这是最易读的解决方案。其他一些人很聪明但很模糊:) @DRapp: CASE 不是一个函数,它是一个返回值的表达式。即使经过计算,您也可以按任何值排序。【参考方案2】:

使用 MySQL,您可以使用以下更短的代码:

SELECT * FROM tbl ORDER BY name > 'F' DESC, name

G,H,I...大于F,所以上面的条件会为真,真排在后,假排在前,所以放DESC就行了

【讨论】:

【参考方案3】:

您可以使用 2 个选择查询来创建视图

SELECT * FROM mytable WHERE name > 'F' ORDER BY name

SELECT * FROM mytable WHERE name < 'F' ORDER BY name

并合并结果

【讨论】:

小错误: 【参考方案4】:

也许我错过了什么,但它是

SELECT * FROM mytable WHERE name > 'F' ORDER BY name

【讨论】:

你没有得到所有的行。我需要以 A 开头的名称在 Zs 之后【参考方案5】:

我认为他想要一个类似的答案

SELECT * FROM mytable WHERE name > 'F' ORDER BY SUBSTR (name, 1, 1) + 'G'

【讨论】:

我无法让它工作我得到'FUNCTION anonymous_databse.SUBSTR 不存在' 对不起——我只是做了一些懒惰的打字,这意味着你可以如何做到这一点。我应该对 Oracle 说,使用 ORDER BY ASCII('G') + ASCII(SUBSTR (name,1,1))

以上是关于MySQL ORDER BY 偏移量的主要内容,如果未能解决你的问题,请参考以下文章

limit where group by having select

在 MySQL 中计算时区的偏移量

Grails findAll带有排序,顺序,最大值和偏移量?

如何加快 LIMIT 子句中偏移量较大的 MySQL 查询?

为啥 MYSQL 更高的 LIMIT 偏移量会减慢查询速度?

如何使用子查询来定义 Mysql SELECT LIMIT 偏移量?