SQL - 需要在同一表中为客户打印相同数量的记录和相同的产品

  • 本文关键字:记录 打印 SQL 客户 sql oracle
  • 更新时间 :
  • 英文 :


我有customer_idproduct_id的表格

customer_id product_id
c1          1
c1          2
c1          3
c2          1
c2          2
c2          3
c3          5
c4          5
c5          3

我需要过滤带来相同数量产品的相同数量的客户。

除此之外,客户 (c5,3( 无效,因为他具有相同的product_id但记录数与客户不匹配。

这是我尝试过的查询

SELECT T1.ORDER_ID FROM @ORDER T1
WHERE EXISTS (SELECT * FROM @ORDER T2
WHERE T2.PRODUCT_ID = T1.PRODUCT_ID
AND T2.ORDER_ID != T1.ORDER_ID
GROUP BY T2.ORDER_ID)

输出应该是这样的

customer_id product_id

customer_id product_id
c1 1
c1 2
c1 3
c2 1
c2 2
c2 3
c3 5
c4 5

我尝试了以下方法,看看它是否也适用于您的情况。这似乎不是最好的解决方案,但它有效。

TEST_DROP1:

cust_id Prod_id
C1  1
C1  2
C1  3
C2  1
C2  2
C2  3
C3  5
C4  5
C5  3

溶液:

第 1 步:

CREATE TABLE TEST_DROP2 AS
SELECT CUST_ID,
LISTAGG(PRODUCT_ID, ',') WITHIN GROUP (
ORDER BY PRODUCT_ID) prods
FROM TEST_DROP1
GROUP BY CUST_ID;

TEST_DROP2:

cust_id prod_id
C1  1,2,3
C2  1,2,3
C3  5
C4  5
C5  3

运行以下查询,

SELECT *
FROM TEST_DROP1
WHERE cust_id IN
(SELECT CUST_ID
FROM TEST_DROP2
WHERE PRODS IN
( SELECT PRODS FROM TEST_DROP2 GROUP BY PRODS HAVING COUNT(1)>1
)
)
ORDER BY CUST_ID,
product_id;**

结果:

C1  1
C1  2
C1  3
C2  1
C2  2
C2  3
C3  5
C4  5

最新更新