gpt4 book ai didi

mysql - 按大小写排序 : Where value LIKE, 然后位置

转载 作者:行者123 更新时间:2023-11-29 02:40:59 26 4
gpt4 key购买 nike

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

  • 如果列值类似于'Qwerty%',将其放在顶部,然后按位置升序排序
  • 如果列值不像'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 正确排序。

最佳答案

您的 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;

关于mysql - 按大小写排序 : Where value LIKE, 然后位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52206572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com