4

3つの列を持つテーブルproductがあります:
--id_product
--quantity_in_stock
--product_name

= 0の場合、結果の下部にquantity_in_stockを含むすべての行をproduct_nameで注文します。

このクエリを試しましたが、機能しません。

(SELECT * 
FROM products 
WHERE quantity_in_stock != 0
ORDER BY product_name ASC)
UNION
(SELECT * 
FROM products 
WHERE quantity_in_stock = 0
ORDER BY product_name ASC)

たぶんそれを行うためのより簡単な方法がありますが、それは月曜日です!;)

4

1 に答える 1

8

には任意のORDER BY式を含めることができるため、それらを評価= 0して、後でソートするより高い値を割り当てることができます。

SELECT * 
FROM products
ORDER BY 
  /* If quantity_in_stock is 0, assign a 1 otherwise 0. The ones sort after 0 */
  CASE WHEN quantity_in_stock = 0 THEN 1 ELSE 0 END ASC,
  /* Then sub-order by name */
  product_name ASC

MySQLのブール評価は1または0を返すため、これを次のように簡略化できます。ただし、すべてのRDBMSで機能するわけではありません。

SELECT * 
FROM products
ORDER BY
  /* Will return 0 (false) for quantity_in_stock <> 0 and 1 if true */
  (quantity_in_stock = 0) ASC,
  product_name ASC

ただし、quantity_in_stockインデックスが作成されていない場合、クエリのパフォーマンスがこれによって悪影響を受ける可能性があることに注意してください。

于 2013-01-21T13:51:44.590 に答える