MySQL 8.0 按条件排序

MySQL 8.0 Order by condition

我想从产品 table 中获取数据。我必须按价格排序,但首先它会显示价格在给定的最大值和最小值之间的那些。

table的例子:

Title price
Prod 1 10
Prod 2 8
Prod 3 15
Prod 4 11
Prod 5 12
Prod 6 20
Prod 7 24

如果最小值 = 10 且最大值 = 15

结果应该是这个序列:Prod 1, Prod 4, Prod 5, Prod 3, Prod 2, Prod 6, Prod 7

谢谢。

您可以使用 A CASE WHEN 来确定两组。

1 之间的价格

SELECT * FROM product
ORDER By CASE WHEN `price` BETWEEN 10 AND 15 Then 1 
ELSE 2 END ASC, `price` ASC
Title  | price
:----- | ----:
Prod 1 |    10
Prod 4 |    11
Prod 5 |    12
Prod 3 |    15
Prod 2 |     8
Prod 6 |    20
Prod 7 |    24

db<>fiddle here

您可以先按布尔表达式 price BETWEEN 10 AND 15 DESC 排序,然后再按 price:

SELECT *
FROM tablename
ORDER BY price BETWEEN 10 AND 15 DESC, price;

参见demo

您也可以使用 UNION.

将 2 个选择组合成一个
select * from test where value >= 10 and value <= 15
union
select * from test where value < 10 or value > 15

Select Demo