3

我有一个使用的查询,ORDER BY ASC因此首先出现 0。我希望它们排在最后,同时仍保持升序搜索顺序。我怎样才能做到这一点?

这方面的一个例子是:

SELECT product_price ORDER BY product_price ASC

所以而不是

0
1
2
3

我想要

1
2
3
0
4

3 回答 3

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

于 2012-06-13T19:52:09.173 回答
2
SELECT product_price FROM tablename ORDER BY IF(product_price=0,4294967295,product_price) ASC
于 2012-06-13T19:48:45.490 回答
1

为了获得最佳性能,请使用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。这意味着正在将临时表写入磁盘。处理大型查询时非常慢。

于 2012-06-13T20:07:50.043 回答