确定样本是否包含多个 ID 的 0 行
Determining if a sample contains 0 rows for multiple ID's
所以我创建了一个简单的查询,它将传递所有 OrdID
的订单有 2 个或更多苹果:
SELECT ordid
FROM results
WHERE ordid IN (12,24,53,21,41,51)
AND product = 'apples'
GROUP BY ordid
HAVING COUNT(ordid) > 1
如何为包含 0 个苹果的 OrdID
执行此操作?(这不起作用,因为苹果 OrdID
上没有产品,因此它传递 0 行。 ) 我希望它列出所有 OrdID
的 Apples < 1 产品。
SELECT ordid
FROM results
WHERE ordid IN (12,24,53,21,41,51)
AND product = 'apples'
GROUP BY ordid
HAVING COUNT(ordid) < 1
我无法在我的机器上重现,但我希望这个查询应该有效:
SELECT ordid
FROM results
WHERE ordid in (12,24,53,21,41,51)
GROUP BY ordid
HAVING SUM(CASE WHEN product = 'apples' THEN 1 ELSE 0 END) < 1
我用产品的 COUNT() 而不是 orderid 切换了 HAVING,因为您要计算产品的数量。
SELECT ordid
FROM results
WHERE ordid in (12,24,53,21,41,51) and product = 'apples'
GROUP BY ordid
HAVING COUNT(product) = 0
使用 EXISTS() 函数获取所有 OrdID,其中不存在与 product = 'apples'
相关的行
您 运行 遇到的问题是您要从 table 中选择(即限制为那些行),您想要匹配的是 table(即排除那些行)。这些是相反的。
相反,将其翻转过来,以便从值集中进行选择,然后排除匹配的值:
SELECT ordid FROM (VALUES (12),(24),(53),(21),(41),(51)) AS ordids(ordid)
WHERE NOT EXISTS (
SELECT * FROM results
WHERE results.ordid = ordids.ordid
AND results.product = 'apples'
)
这将 return 一个 ordid
的结果,即使该值根本没有出现在 results
table 中。
所以我创建了一个简单的查询,它将传递所有 OrdID
的订单有 2 个或更多苹果:
SELECT ordid
FROM results
WHERE ordid IN (12,24,53,21,41,51)
AND product = 'apples'
GROUP BY ordid
HAVING COUNT(ordid) > 1
如何为包含 0 个苹果的 OrdID
执行此操作?(这不起作用,因为苹果 OrdID
上没有产品,因此它传递 0 行。 ) 我希望它列出所有 OrdID
的 Apples < 1 产品。
SELECT ordid
FROM results
WHERE ordid IN (12,24,53,21,41,51)
AND product = 'apples'
GROUP BY ordid
HAVING COUNT(ordid) < 1
我无法在我的机器上重现,但我希望这个查询应该有效:
SELECT ordid
FROM results
WHERE ordid in (12,24,53,21,41,51)
GROUP BY ordid
HAVING SUM(CASE WHEN product = 'apples' THEN 1 ELSE 0 END) < 1
我用产品的 COUNT() 而不是 orderid 切换了 HAVING,因为您要计算产品的数量。
SELECT ordid
FROM results
WHERE ordid in (12,24,53,21,41,51) and product = 'apples'
GROUP BY ordid
HAVING COUNT(product) = 0
使用 EXISTS() 函数获取所有 OrdID,其中不存在与 product = 'apples'
您 运行 遇到的问题是您要从 table 中选择(即限制为那些行),您想要匹配的是 table(即排除那些行)。这些是相反的。
相反,将其翻转过来,以便从值集中进行选择,然后排除匹配的值:
SELECT ordid FROM (VALUES (12),(24),(53),(21),(41),(51)) AS ordids(ordid)
WHERE NOT EXISTS (
SELECT * FROM results
WHERE results.ordid = ordids.ordid
AND results.product = 'apples'
)
这将 return 一个 ordid
的结果,即使该值根本没有出现在 results
table 中。