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

最高のパフォーマンスを得るには、ユニオンを使用してください。

(
    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

yeilds Using filesort。これは、一時テーブルがディスクに書き込まれていることを意味します。大きなクエリを処理しているときは非常に遅くなります。

于 2012-06-13T20:07:50.043 に答える