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 中,比较直接得出0
和1
。这意味着您可以摆脱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
Grails findAll带有排序,顺序,最大值和偏移量?
如何加快 LIMIT 子句中偏移量较大的 MySQL 查询?