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
我想从产品 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