我有一个使用ORDER BY ASC
的查询,因此0首先出现。我希望他们能够在保持升序搜索顺序的同时达到最后。我怎样才能做到这一点?
这方面的一个例子是:
SELECT product_price ORDER BY product_price ASC
所以而不是
0
1
2
3
我想要
1
2
3
0
答案 0 :(得分:3)
我没有MySQL进行测试,但这适用于SQL Server和Advantage Database Server:
SELECT
product_price
ORDER BY
CASE product_price WHEN 0 then 99999999 ELSE product_price END
将99999999
系列替换为product_price
列类型的最大值。
答案 1 :(得分:2)
SELECT product_price FROM tablename ORDER BY IF(product_price=0,4294967295,product_price) ASC
答案 2 :(得分:1)
为获得最佳效果,请使用union。
(
SELECT
*
FROM
products
WHERE
product_price > 0
ORDER BY
product_price ASC
)
UNION
(
SELECT
*
FROM
products
WHERE
product_price = 0
)
替代方案,使用filesort,当你有大表时,它可能会非常慢。
EXPLAIN SELECT
*
FROM
products
ORDER BY
IF(product_price = 0, 1, 0) ASC
,product_price ASC
yeilds Using filesort
。这意味着临时表正在磁盘上写入。当你处理大量查询时非常慢。