【问题标题】:Mysql - order a product table based on two column: discounted_price and priceMysql - 根据两列订购产品表:discounted_price 和 price
【发布时间】:2012-06-30 11:11:29
【问题描述】:

我有一个包含以下列的表格(我简化了一点):

  • 产品名称
  • PRODUCT_code
  • 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

我该怎么做?

【问题讨论】:

    标签: mysql sql comparison sql-order-by


    【解决方案1】:
    select name, code, if(discounted_price=0,price,discounted_price) as real_price 
    from product
    order by real_price
    

    【讨论】:

      【解决方案2】:
      order by (case 
                when product_discounted_price = 0 then product_price 
                else product_discounted_price 
                end)
      

      【讨论】:

        【解决方案3】:

        您可以在不使用时将 discounted_price 列值设为 NULL,然后使用 COALESCE 进行订购:

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

        如果您不想使用 NULL,可以使用 IF 而不是 COALESCE 重写相同的查询,但那样会更复杂一些。

        【讨论】:

        • -1 COALESCE 返回列表中的第一个非 NULL 值,如果没有非 NULL 值,则返回 NULL。价格不是空值而是零值。
        • 这就是我写这部分的原因:“您可以在不使用时制作 discounted_price列值NULL,然后使用COALESCE订购”实际上,如果价格不存在,则使用实际的 NULL 值更合乎逻辑。
        猜你喜欢
        • 2011-08-03
        • 2013-12-01
        • 2019-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-12
        相关资源
        最近更新 更多