我有一个使用的查询,ORDER BY ASC
因此首先出现 0。我希望它们排在最后,同时仍保持升序搜索顺序。我怎样才能做到这一点?
这方面的一个例子是:
SELECT product_price ORDER BY product_price ASC
所以而不是
0
1
2
3
我想要
1
2
3
0
我有一个使用的查询,ORDER BY ASC
因此首先出现 0。我希望它们排在最后,同时仍保持升序搜索顺序。我怎样才能做到这一点?
这方面的一个例子是:
SELECT product_price ORDER BY product_price ASC
所以而不是
0
1
2
3
我想要
1
2
3
0
我没有要测试的 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
SELECT product_price FROM tablename ORDER BY IF(product_price=0,4294967295,product_price) ASC
为了获得最佳性能,请使用union。
(
SELECT
*
FROM
products
WHERE
product_price > 0
ORDER BY
product_price ASC
)
UNION
(
SELECT
*
FROM
products
WHERE
product_price = 0
)
另一种方法是使用文件排序,当你有大表时,这可能会很慢。
EXPLAIN SELECT
*
FROM
products
ORDER BY
IF(product_price = 0, 1, 0) ASC
,product_price ASC
产量Using filesort
。这意味着正在将临时表写入磁盘。处理大型查询时非常慢。