ecs*_*rim 21 mysql sql sorting
我有这个表(简化):
CREATE TABLE `my_table` ( `id` INT NOT NULL AUTO_INCREMENT , `item_name` VARCHAR(45) NULL , `price` DECIMAL(10,0) NULL , PRIMARY KEY (`id`) )
我需要从表格中选择所有项目,这样订购:
1.价格> 0.00的商品,按价格ASC排序
2.价格= 0.00的商品最后,按ID排序
我试过这个:
SELECT *
FROM my_table
WHERE 1
ORDER BY
CASE price WHEN !0.00 THEN price
ELSE id
END
ASC
我得到的结果就像
item_name | price ----------|------- foo | 150,00 bar | 0,00 baz | 500,00 hum | 0,00
如何构建查询
item_name | price ----------|------- foo | 150,00 baz | 500,00 bar | 0,00 hum | 0,00
?
感谢您的时间
Gab*_*oli 40
这样就可以了.
SELECT *
FROM my_table
WHERE 1
ORDER BY
CASE price WHEN 0 THEN 1
ELSE -1
END ASC, price asc, id asc
Run Code Online (Sandbox Code Playgroud)
小智 20
您还可以使用以下内容:
SELECT *
FROM my_table
WHERE 1
ORDER BY price=0, price, id;
Run Code Online (Sandbox Code Playgroud)
对于零价格的商品,零件'price = 0'将为1,对于具有非零价格的商品,零件将为0.由于默认排序顺序为ASC,因此现在首先放置非零项目.
order-by子句的下一位意味着非零项目按价格排序(再次升序).如果任何具有非零价格的商品具有相同的价格,它们将按ID进一步排序,但我们并不关心.
最后一部分仅适用于price = 0的项目.由于所有这些商品都具有相同的价格,因此效果是按ID对所有零价商品进行分类.