1

次の列のテーブルがあります(少し簡略化しています)。

  • 商品名
  • 製品コード
  • PRODUCT_price
  • PRODUCT_discounted_price

今、私がそれらを表示するとき、それらは価格で注文することができます。問題は、PRODUCT_priceとPRODUCT_discounted_priceの両方を考慮に入れて、PRODUCT_discounted_priceがある場合はそれで比較し、ない場合は無視するようにするにはどうすればよいですか?

たとえば、次の製品がある場合:

  • 名前、1、12、10
  • 名前2、2、11、0
  • 名前3、3、6、0
  • 名前4、4、25、9
  • 名前5、5、30、13

これらは次のように注文する必要があります。

  • 名前3、3、6、0
  • 名前4、4、25、9
  • 名前、1、12、10
  • 名前2、2、11、0
  • 名前5、5、30、13

これどうやってするの?

4

3 に答える 3

2
select name, code, if(discounted_price=0,price,discounted_price) as real_price 
from product
order by real_price
于 2012-06-30T11:17:44.800 に答える
2
order by (case 
          when product_discounted_price = 0 then product_price 
          else product_discounted_price 
          end)
于 2012-06-30T11:18:52.400 に答える
0

使用されていない場合はdiscounted_price列の値をNULLにしてから、COALESCEを使用して注文することができます。

SELECT COALESCE(PRODUCT_discounted_price, PRODUCT_price) AS order_col FROM products ORDER BY order_col

NULLを使用したくない場合は、COALESCEの代わりにIFを使用して同じクエリを書き直すことができますが、その方法では少し複雑になります。

于 2012-06-30T11:22:37.067 に答える