按大小写排序:如果值类似,则按POSITION

时间:2018-09-06 14:37:35

标签: mysql sql-order-by

我有一个需要相应排序的结果集:

  • 如果列值类似“ Qwerty%”,则将其放在顶部,然后按POSITION升序进行排序
  • 如果列值不像“ Qwerty%”,则将其添加到上述“ Qwerty%”结果集中,并按POSITION升序对其进行排序

例如,结果集如下:

 NAME                |    POSITION
 ---------------------------------
 entitlement         |    4
 threaten            |    1
 Qwerty Name         |    1
 Qwerty architecture |    7
 drown               |    6
 expectation         |    2
 clash               |    3
 foot                |    7
 ask                 |    10
 Qwerty structure    |    11
 Qwerty therapist    |    3

应按以下顺序返回:

 NAME                |    POSITION
 ---------------------------------
 Qwerty Name         |    1
 Qwerty therapist    |    3
 Qwerty architecture |    7
 Qwerty structure    |    11
 threaten            |    1
 expectation         |    2
 clash               |    3
 entitlement         |    4
 drown               |    6
 foot                |    7
 ask                 |    10

到目前为止,我已经提出了这个建议:

SELECT NAME, POSITION FROM TABLE_NAME
ORDER BY CASE NAME
    WHEN NAME LIKE 'Qwerty%' THEN CONCAT('A', NAME)
    ELSE POSITION END

但是结果集返回的错误如下:

 NAME                |    POSITION
 ---------------------------------
 Qwerty Name         |    1
 Qwerty structure    |    11
 Qwerty therapist    |    3
 Qwerty architecture |    7
 threaten            |    1
 drown               |    6
 expectation         |    2
 ask                 |    10
 foot                |    7
 clash               |    3
 entitlement         |    4

如您所见,对其中没有'Qwerty%'的名称没有进行排序,而没有按POSITION正确排序的名称也没有进行排序。

2 个答案:

答案 0 :(得分:1)

您的ORDER BY子句中需要两个排序级别:

SELECT NAME, POSITION
FROM TABLE_NAME
ORDER BY
    CASE WHEN NAME LIKE 'Qwerty%' THEN 0 ELSE 1 END,
    POSITION;

enter image description here

Demo

这是使用REGEXP而不是CASE表达式的另一个更整洁的查询版本:

SELECT NAME, POSITION
FROM TABLE_NAME
ORDER BY
    NAME NOT REGEXP 'Qwerty',
    POSITION;

答案 1 :(得分:0)

尝试一下:

SELECT NAME, POSITION, SUM (CASE WHEN NAME LIKE 'Qwerty%' THEN 0 ELSE 1 END) AS Sort
FROM TABLE_NAME
ORDER BY Sort, POSITION
相关问题