を使用するクエリが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
最高のパフォーマンスを得るには、ユニオンを使用してください。
(
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
。これは、一時テーブルがディスクに書き込まれていることを意味します。大きなクエリを処理しているときは非常に遅くなります。