首页 > 解决方案 > SQL SELECT 按特定行排序

问题描述

假设我有一个表food,我查询SELECT name FROM food ORDER BY name

| name
|--------
| Apple
| Banana
| Carrot
| Donut
...

我希望指定将我选择的特定项目固定在顶部(例如“柠檬”,然后是“胡萝卜”),如果它们在表中。像这样:

| name
| -------
| Lemon
| Carrot
| Apple
| Banana
| Donut
...

我可以使用哪种 SQL 查询来获得这种特定的排序?

标签: sql

解决方案


您可以在 order by 子句中使用 case 语句来确定具有特定名称的项目的优先级。

下面将通过从案例中为 Lemon 和 Carrot 分配值 1 和 2 来将 Lemon 和 Carrot 按优先级排序,其中所有其他人将获得值 3。剩下的分配为 3 的那些将按顺序中的第二个表达式排序子句,它只是名称列。

SELECT *
FROM food
ORDER BY
  CASE name
    WHEN 'Lemon' THEN 1
    WHEN 'Carrot' THEN 2
    ELSE 3
  END,
  name

推荐阅读