我有一个名为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/

10-12 18:38