gpt4 book ai didi

带或不带 HAVING 子句的 MySQL COUNT 查询给出相同的结果

转载 作者:行者123 更新时间:2023-11-30 00:03:24 26 4
gpt4 key购买 nike

我在涉及 COUNT 和 HAVING 子句的 SQL 查询时遇到问题。目标是获取所有有库存且未被其他客户“挑选”的产品的数量,因此有 HAVING 子句。

但是,当在下面的查询末尾使用或不使用 HAVING 子句运行查询时,我得到与结果相同的 COUNT。

为了确保 COUNT 个结果不应该相同,我尝试运行查询来检查是否有缺货的产品,因为所有产品都需要有库存才能使结果匹配,并确认肯定有缺货产品缺货。

SELECT
COUNT(DISTINCT p.product_id)
FROM product p
LEFT JOIN product_variant pv
ON pv.product_variant_id = p.product_id
LEFT JOIN depot_product_stock dps
ON dps.product_variant_id = pv.product_variant_id
LEFT JOIN (
SELECT pii.quantity, pii.product_variant_id
FROM `picklist_item` pii
WHERE pii.STATUS IN ('not picked')
) AS pickListNotPicked
ON pickListNotPicked.product_variant_id = pv.product_variant_id
LEFT JOIN (
SELECT pii.quantity, pii.product_variant_id
FROM `picklist_item` pii
LEFT JOIN `packing` packi ON packi.picklist_id = pii.picklist_id
WHERE pii.STATUS IN ('picked')
AND pii.date_picked > NOW() - INTERVAL 2 WEEK
AND packi.picklist_id IS NULL
) AS pickListPicked
ON pickListPicked.product_variant_id = pv.product_variant_id
LEFT JOIN (
SELECT pii.quantity, pii.product_variant_id
FROM `picklist_item` pii
LEFT JOIN `packing` packi ON packi.picklist_id = pii.picklist_id
WHERE packi.`status` IN ('new', 'in progress')
) AS pickListInProgress
ON pickListInProgress.product_variant_id = pv.product_variant_id
WHERE p.deleted = 0
HAVING SUM(dps.physical_stock)
- ifnull(SUM(pickListNotPicked.quantity),0)
- ifnull(SUM(pickListPicked.quantity) ,0)
- ifnull(SUM(pickListInProgress.quantity) ,0)
> 0

我不知道我的查询哪里出了问题。请帮忙。谢谢。

最佳答案

我认为您不需要 having 子句。您的查询仅返回一行。该 having 子句可能会返回零行而不是 1 行。并且,having 子句正在查看所有产品。

也许您需要一个 where 子句:

WHERE p.deleted = 0 AND
(dps.physical_stock - ifnull(pickListNotPicked.quantity, 0) -
ifnull(pickListPicked.quantity, 0)
ifnull(pickListInProgress.quantity, 0)
) > 0

请注意,我更喜欢用 coalesce() 替换 ifnull()。 (如果可以选择,我通常更喜欢 ANSI 标准函数。)

关于带或不带 HAVING 子句的 MySQL COUNT 查询给出相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24824119/

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