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",它们是按名称排序的(即使我使用简单的一个字母字符作为上下文)
我试图在以下查询的每个类别中获取 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",它们是按名称排序的(即使我使用简单的一个字母字符作为上下文)