我有一个名为products
的表,其中包含所有具有相关颜色变体的产品,例如T恤和product_variants
。黑色,蓝色,绿色每个都有一个stock
列-保留剩余的库存数量。
我想建立一个查询,告诉我哪些产品完全售罄,哪些没有。stock
列应为0以便售罄,但是如果它的NULL
或> 0
,则有库存。当我们的数量不受限制时,将使用NULL
。
这是我想要得到的以下结果:
product_id|soldOut|stock
------------------
1 |Yes |0
2 |Yes |0
3 |No |NULL
4 |No |1
我试图做的是以下几点:
抢所有产品
加入product_variants
按product_id分组,每个产品仅显示一个结果。
选择product_id和
IF(stock > 0 OR stock IS NULL, 'No', 'Yes') as SoldOUt
查询:
SELECT p.product_id, IF(pv.stock > 0 OR pv.stock IS NULL, 'No', 'Yes') as SoldOUt
FROM products p
JOIN product_variants pv ON (`pv`.`product_id` = `p`.`product_id`)
GROUP BY p.product_id
结果是
soldOut
是不正确的-似乎只是随机获取了变体的一行并检查了stock
并回答了。相反,它应该检查所有变体行,并查看其中是否还没有售罄(使用上述if语句),然后返回该产品的最终答案。
我做错了什么?如何完成?
最佳答案
首先,您不需要join
,只需聚合即可。
因此,这是一种检查所有变体是否为0
的方法:
select pv.product_id,
(case when sum(pv.stock = 0) = count(*) then 'Yes' else 'No'
end) as SoldOut
from product_variants pv
group by p.product_id;
我猜您也希望在最后一列中输入
sum(pv.stock)
。关于mysql - MySQL-如果SELECT中有多个行列值,则为IF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36955235/