我有一个需要相应排序的结果集:
例如,结果集如下:
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正确排序的名称也没有进行排序。
答案 0 :(得分:1)
您的ORDER BY
子句中需要两个排序级别:
SELECT NAME, POSITION
FROM TABLE_NAME
ORDER BY
CASE WHEN NAME LIKE 'Qwerty%' THEN 0 ELSE 1 END,
POSITION;
这是使用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