2

ORDER BYmysqlクエリで使用するより高度な方法があるかどうかを考えていました。

価格順を使用して、データベースから製品を取得するクエリがあります。問題は、割引値が null でない場合、メイン価格を上書きすることであり、何らかの方法で明細を上書きする必要がありますORDER BY

考え:

DESC

product_price discount
900           0
800           0
1200          700 //dicount overrides price
600           0



クエリは 25 行ありますが、ロジックは次のようになります。

SELECT
product_price as price,
IFNULL(discount_amount,0) as discount

FROM not_relevant

WHERE not_relevant

ORDER BY product_price DESC

そのため、価格順のカテゴリに商品を書き込むと、特定の商品が割引されているため、メインの価格が上書きされ、価格だけで並べ替えると正確ではありません。

coalesce、または2つを使用しようとしましたORDER BY

何か案は?手伝ってくれてありがとう。

4

3 に答える 3

3

これはあなたのために働くはずだと思います:

SELECT
product_price,
IFNULL(discount_amount,0) as discount,
IFNULL(discount_amount,product_price) as price

FROM not_relevant

WHERE not_relevant

ORDER BY price DESC

それは基本的にあなたが求めていることを行います...discountが null でない場合は使用され、それ以外の場合は が使用され、product_price結果が順序付けされます。

于 2013-08-29T11:38:32.013 に答える
1

これは、割引が実際の割引価格であり、割引額ではない場合に使用できます

SELECT product_price as price,
IFNULL(discount_amount,0) as discount

FROM not_relevant
    ORDER BY 
CASE WHEN discount_amount IS NULL THEN price ELSE discount_amount END
于 2013-08-29T11:38:11.357 に答える
1
SELECT product_price As price
     , Coalesce(discount_amount, 0) As discount
     , Coalesce(discount_amount, product_price) As order_by_this
FROM   not_relevant
WHERE  not_relevant
ORDER
    BY order_by_this

または:

SELECT product_price As price
     , Coalesce(discount_amount, 0) As discount
FROM   not_relevant
WHERE  not_relevant
ORDER
    BY Coalesce(discount_amount, product_price)
于 2013-08-29T11:38:48.533 に答える