gpt4 book ai didi

MySQL - SELECT 中的 IF 获取多行列值

转载 作者:行者123 更新时间:2023-11-29 11:33:49 26 4
gpt4 key购买 nike

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

我尝试做的事情如下:

  1. 获取所有产品
  2. 连接到product_variants
  3. 按product_id分组,每个产品仅显示一个结果。
  4. 选择 Product_id 和 IF(stock > 0 OR stock IS NULL, 'No', 'Yes') 作为 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 不正确 - 看起来它只是随机选择一行变体并检查其库存和答案。

相反,它应该检查所有变体行,看看其中是否有任何一个尚未售完(使用上面的 if 语句),然后返回该产品的最终答案。

我做错了什么以及如何实现这一点?

最佳答案

首先,您不需要加入,只需聚合。

因此,这是一种检查所有变体是否为 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 - SELECT 中的 IF 获取多行列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36955235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com