在一列中以特定方式在 MySQL 中排序
Sorting in MySQL in a specific manner in one column
所以我有一个数据,其中一列(部分)包含以下内容:
A1LB
A1LC
A1RC
A2LB
A2LC
A2RC
B1LB
B1LC
但我希望数据看起来像这样:
A1LC
A1LB
A1RC
A2LC
A2LB
A2RC
B1LC
B1LB
我试过了 "ORDER BY CASE WHEN section like %LC" 然后 1 其他 2 结束”
但它与所有 LC 一起出现在顶部
A1LC
A2LC
B1LC
B2LC
A1LB
A1RC
A2LB
A2RC
B1LB
B1RC
如果没有将所有 LC 放在最上面但按照我想要的顺序,我怎么能这样做呢?
你可以这样排序
- 按前 2 个字符排序
- 然后列出最后 2 个字符为
LC
的记录
- 然后一般按最后2个字符排序
ORDER BY substring(section, 1, 2),
substring(section, 3, 2) 'LC',
substring(section, 3, 2)
我认为您需要制作一个 table 映射 {LC -> 1, LB -> 2, RC -> 3}。你可以尝试这样的事情:
CREATE TABLE map (ky VARCHAR(2), ord TINYINT, PRIMARY KEY(ky,ord))
INSERT INTO map VALUES ('LC', 1), ('LB', 2), ('RC', 3)
SELECT col
FROM table
JOIN map ON RIGHT(col, 2) = map.ky
ORDER BY LEFT(col, 2) ASC, map.ord DESC
看起来像:
ORDER BY substring(section, 1, 3), substring(section, 4, 1) desc
所以我有一个数据,其中一列(部分)包含以下内容:
A1LB
A1LC
A1RC
A2LB
A2LC
A2RC
B1LB
B1LC
但我希望数据看起来像这样:
A1LC
A1LB
A1RC
A2LC
A2LB
A2RC
B1LC
B1LB
我试过了 "ORDER BY CASE WHEN section like %LC" 然后 1 其他 2 结束”
但它与所有 LC 一起出现在顶部
A1LC
A2LC
B1LC
B2LC
A1LB
A1RC
A2LB
A2RC
B1LB
B1RC
如果没有将所有 LC 放在最上面但按照我想要的顺序,我怎么能这样做呢?
你可以这样排序
- 按前 2 个字符排序
- 然后列出最后 2 个字符为
LC
的记录
- 然后一般按最后2个字符排序
ORDER BY substring(section, 1, 2), substring(section, 3, 2) 'LC', substring(section, 3, 2)
我认为您需要制作一个 table 映射 {LC -> 1, LB -> 2, RC -> 3}。你可以尝试这样的事情:
CREATE TABLE map (ky VARCHAR(2), ord TINYINT, PRIMARY KEY(ky,ord))
INSERT INTO map VALUES ('LC', 1), ('LB', 2), ('RC', 3)
SELECT col
FROM table
JOIN map ON RIGHT(col, 2) = map.ky
ORDER BY LEFT(col, 2) ASC, map.ord DESC
看起来像:
ORDER BY substring(section, 1, 3), substring(section, 4, 1) desc