SQL 按大小写排序

SQL Order By with case when

我试图通过 CASE WHEN.

理解 ORDER BY

我的目标是从根本上理解它,因为我创建了不同的用例

我的基础table如下

|   Name |
|--------|
|    BPM |
|    BXR |
| Others |
|    XZA |
|    XYZ |
|    PQR |
|    ABC |

查询 1:基本 ORDER BY

SELECT * 
FROM City 
ORDER BY Name

查询 1 Result:Gave 正确输出如下(名称列按升序排序)

|   Name |
|--------|
|    ABC |
|    BPM |
|    BXR |
| Others |
|    PQR |
|    XYZ |
|    XZA |

查询 2:我最后想要 Others

SELECT * 
FROM City
ORDER BY CASE 
         WHEN Name = 'Others' THEN 1
         ELSE 0
         END

查询 2 结果:我得到部分正确 result.I 最后得到 Others 但其他 names 我预计它会在升序 order.They 实际出现的方式在基地 table.

|   Name |
|--------|
|    BPM |
|    BXR |
|    XZA |
|    XYZ |
|    PQR |
|    ABC |
| Others |

我也不明白 01ORDER BY 语句中的实际含义。

查询 3:我最后想要 BXROthers

 SELECT * 
    FROM City
    ORDER BY CASE
             WHEN Name = 'BXR' THEN 1
             WHEN Name = 'Others' THEN 2
             ELSE 0
             END

查询 3 结果:我部分正确 result.I 最后得到 'Others' 和 'BXR' 但其他 Name 不是按字母顺序排列的 order.Same在查询 2.Here 中我也不理解 012

的意义
|   Name |
|--------|
|    BPM |
|    XZA |
|    XYZ |
|    PQR |
|    ABC |
|    BXR |
| Others |

查询 4:我希望 OthersPQR 位于顶部。

SELECT * 
FROM City
ORDER BY CASE
         WHEN Name = 'PQR' THEN 0
         WHEN Name = 'Others' THEN 1
         ELSE 2
         END

查询 4 ​​结果:我在顶部得到 PQROthers,但其余名称不按字母顺序排列。

|   Name |
|--------|
|    PQR |
| Others |
|    BPM |
|    BXR |
|    XZA |
|    XYZ |
|    ABC |

我对 012 的假设是,它们只是决定 "order" 记录所在位置的数字。 (首先保留记录为 0 的记录,如果所有其他记录都有 1 则应按字母顺序排序) (如果有'0','1','2',在0的记录中应该是第一个,1的记录应该是第二个所有其他具有2的记录应该被排序按字母顺序)

如有错误请指正

SQLFiddle

您还需要按顺序添加名称

DEMO

SELECT * 
FROM City
ORDER BY CASE
         WHEN Name = 'PQR' THEN 0
         WHEN Name = 'Others' THEN 1
         ELSE 2
         END,name

输出:

**Name**

PQR
Others
ABC
BPM
BXR
XYZ
XZA

我们也可以 ORDER BY 使用 FIELD:

SELECT * 
FROM City
ORDER BY FIELD(Name, 'Others', 'PQR') DESC, name;

Demo

FIELD 的行为是 return 1 表示 Others,2 表示 PQR,0 表示任何其他名称。因此,我们使用降序来确保 PQR 首先出现,然后是 Others,然后是所有其他名称。

您可以将 else 案例中的 name 列保留为:

SELECT * 
FROM City
ORDER BY CASE
         WHEN Name = 'PQR' THEN 0
         WHEN Name = 'Others' THEN 1
         ELSE Name
         END

因为数字总是优先于字母。

SQL Fiddle Demo