【问题标题】:Mysql LEAST() greater than 0Mysql LEAST() 大于 0
【发布时间】:2023-03-19 12:45:01
【问题描述】:

我有一张价格表,我想在价格最低的表上创建一个视图。

例如,我的表有 price1、price2 列。

我想我可以用 LEAST()

例如从价格表中选择最少(price1,price2)

但它应该只考虑大于 0 或不为空的价格。

我可以用 LEAST() 做到这一点吗?

感谢您的建议。

【问题讨论】:

标签: mysql


【解决方案1】:

必须小心,因为如果任一比较器为 NULL,LEAST() 将返回 NULL。

SELECT NULLIF(LEAST(
    COALESCE(NULLIF(price1,0),999999999),
    COALESCE(NULLIF(price2,0),999999999)),
999999999) AS least_price 
FROM pricelist

我假设价格可以为 NULL、零或大于零,但不能小于零。如果价格为零,我使用 NULLIF 强制价格为 NULL。然后使用 COALESCE 强制一个 NULL 为一个非常大的值,这肯定大于另一个值。

使用 LEAST 比较两者。

如果两个价格最初都是 NULL 或零,则比较返回非常大的值。这可能不是您想要的,所以再次使用 NULLIF 将其设为 NULL。

【讨论】:

    【解决方案2】:

    不确定限制 0 的最小功能或者您可以对 2 个价格列使用 case 表达式

    select 
    case when price1 = 0 or price1 is null then price2
         when price2 = 0 or price2 is null then price1
         else least(price1,price2)
    end as price
    from table
    

    【讨论】:

      猜你喜欢
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      相关资源
      最近更新 更多