[英]How to iterate through the array and find sum of all products for all customers using SQL in Azure Cosmos DB -Core SQL API?
[英]SQL - Find customers who bought all products
假設我有 2 個表:
表A
C_ID P_ID
1 1
1 2
2 1
表B
P_ID
1
2
表A中C_ID
和P_ID
作為PK,表B中P_ID
為PK
我想找到所有購買 B 中所有產品的 C_ID(基本上是 B 中的所有 P_ID)。 在上面的示例中, C_ID = 1
你能檢查一下下面是否正確嗎? 任何更有效/更容易的替代方案?
SELECT A.C_ID
FROM A
JOIN B ON A.P_iD = B.P_ID
GROUP BY A.C_ID
HAVING COUNT(DISTINCT A.P_ID) >= (SELECT COUNT(DISTINCT P_ID) FROM B)
謝謝!
以下查詢適用於 MySQL 和 SQL 服務器。
你可以在沒有JOIN
的情況下做到這一點
select
c_id
from tableA
group by
c_id
having count(distinct p_id) = (select count(*) from tableB)
另一個答案不正確,因為它只驗證客戶購買了與產品表中的項目一樣多的不同項目。 但是,如果您的表看起來像這樣:
C_ID P_ID
1 1
1 3
2 1
查詢將返回客戶 1,即使客戶 1 沒有購買所有產品(即,他們沒有購買產品P_ID=2
。
廣義解
您要查找的內容稱為分部查詢。 該策略基於雙重否定,認為:
“給我所有沒有產品、從未購買過的客戶”
在 SQL 中:
-- define a customer table
WITH customers as (
SELECT DISTINCT C_ID
FROM A)
-- all customers who have not
SELECT *
FROM customers as outer
WHERE NOT EXISTS
( -- all products which have not
SELECT *
FROM B as inner
WHERE NOT EXISTS
( -- ever been purchased
SELECT*
FROM A as matchtable
WHERE matchtable.C_ID=outer.C_ID
AND matchtable.P_ID=inner.P_ID)
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.