mysql 按情况排序

mysql order by case

我试图在以下查询的每个类别中获取 NAME 的 ASC 排序结果,但无法得出。

select ID,NEWID,NAME from table 
ORDER BY CASE 
     WHEN ID = PID THEN 1 
     WHEN NEWID IS NOT NULL THEN 2 
     ELSE 3
     END;

输入PID,第returns条记录,第一个出现,其余以NEWID为准。但我希望记录根据 NAME 对 2 个部分进行 ASC 排序(NEWID 不为 null 和 Null)。 请帮助

您应该添加 my_order 列

select 
    ID
  , NEWID
  , NAME
  , CASE 
       WHEN ID = PID THEN 1 
       WHEN NEWID IS NOT NULL THEN 2 
       ELSE 3
     END as my_order 
from table 
ORDER BY my_order;

你非常接近...如果你想将你的 "NewID" 浮动到顶部,请更正设置为 1 的情况。然后所有其他人的 ID 为 2。现在,添加 SECONDARY基于名称的顺序,因此在各自的 1 或 2 中,名称排序如下:

select ID,NEWID,NAME from table 
ORDER BY CASE 
     WHEN ID = PID THEN 1 
     WHEN NEWID IS NOT NULL THEN 2 
     ELSE 3
     END,
     NAME;

例如:如果您的数据有

ID  Name   NewID
1   X      17
2   R      21
3   F      null
4   B      null
5   H      19
6   L      41

而您正在寻找 "PID"(参数 ID)= 5。该订单的结果是 ID#5 在第一个位置

CASE FLAG    ID  Name   NewID
1            5   H      19   (ID=5 floats to the top of the list)

2            6   L      41   (all others that HAD a NewID value)
2            2   R      21
2            1   X      17

3            4   B      null (all the rest without a NewID)
3            3   F      null

注意每个 "case flag",它们是按名称排序的(即使我使用简单的一个字母字符作为上下文)