【发布时间】:2023-03-19 12:45:01
【问题描述】:
我有一张价格表,我想在价格最低的表上创建一个视图。
例如,我的表有 price1、price2 列。
我想我可以用 LEAST()
例如从价格表中选择最少(price1,price2)
但它应该只考虑大于 0 或不为空的价格。
我可以用 LEAST() 做到这一点吗?
感谢您的建议。
【问题讨论】:
标签: mysql
我有一张价格表,我想在价格最低的表上创建一个视图。
例如,我的表有 price1、price2 列。
我想我可以用 LEAST()
例如从价格表中选择最少(price1,price2)
但它应该只考虑大于 0 或不为空的价格。
我可以用 LEAST() 做到这一点吗?
感谢您的建议。
【问题讨论】:
标签: mysql
必须小心,因为如果任一比较器为 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。
【讨论】:
不确定限制 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
【讨论】: