2012-06-30 47 views
1

我有一個表有以下的列(我簡化了一點):MySQL的 - 訂購產品表基於兩個列:discounted_price和價格

  • PRODUCT_NAME
  • PRODUCT_CODE
  • PRODUCT_PRICE
  • PRODUCT_discounted_price

現在,當我展示它們時,它們可以按價格排序。問題是:我如何同時考慮PRODUCT_price和PRODUCT_discounted_price,以便如果有PRODUCT_discounted_price比較它,但是如果它不在那裏,它會被忽略?

例如,如果我有以下產品:

  • 名稱,1,12,10
  • 名稱2,2,11,0
  • NAME3,3,6,0
  • NAME4,4,25,9
  • NAME5,5,30,13

他們應當責令這樣的:

  • NAME3,3,6,0
  • NAME4,4,25日,9
  • 名稱,1,12,10
  • 名稱2,2,11,0
  • NAME5,5, 30,13

我該怎麼做?

回答

2
select name, code, if(discounted_price=0,price,discounted_price) as real_price 
from product 
order by real_price 
+0

它的工作原理。謝謝。 – user1492901

2
order by (case 
      when product_discounted_price = 0 then product_price 
      else product_discounted_price 
      end) 
0

你可以讓使用COALESCE不使用時,它們discounted_price列值NULL,然後下令:

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

如果你不希望使用NULL值,同樣的查詢可以改寫使用IF而不是COALESCE,但這樣會更復雜一些。

+0

-1 COALESCE返回列表中的第一個非NULL值,如果沒有非NULL值,則返回NULL。價格不是零而是零。 –

+0

這就是爲什麼我寫這個零件: 「你可以製造** discounted_price列值** NULL **,當它們不使用時,然後使用COALESCE命令」 實際上,如果有實際的NULL值,價格不存在。 –

+0

對不起,刪除我的downvote。 –