查找与客户ID关联的记录是否都是唯一的

时间:2016-11-25 18:33:46

标签: mysql sql database spreadsheet

我有一个包含两列的表,第一列是客户ID,第二列是商品ID(与商店中存在的所有商品相关联的唯一ID)。我们的数据集是这样的:如果某一天的客户购买了五件商品,那么五件商品的相同客户ID将会有五行相关,但如果在其他日子同一客户购买了4件商品,那么我们将再次拥有4行商品同样的客户ID。

图像表明id为5232的客户在某一天购买了6个不同的商品,而ID为6543的顾客在另一天购买了4个不同的商品和ID为5232的顾客又购买了4个商品,但其中两个商品是相同的身份。

enter image description here

我想要的是“验证特定日期某个客户购买的所有商品是否全部不同”。由于数据集非常庞大,所以我正在寻找一些可以这样做的SQL查询。

输出应为:

  • 对于第一天的客户ID 5232,它应该返回true(所有项目ID都不同)
  • 对于客户ID 6543,它也应该返回true。
  • 对于不同日期的客户ID 5232,它应该返回false。 (两个项目具有相同的ID 342)

1 个答案:

答案 0 :(得分:0)

SELECT
    t.CustomerId
    ,t.Date
    ,COUNT(DISTINCT t.ItemId) as NumOfItems
    ,COUNT(DISTINCT t2.ItemId) as NumOfRepeatedItems
    ,CASE WHEN COUNT(t2.ItemId) > 0 THEN 'false' ELSE 'true' END as UniquePurchases
FROM
    Table t
    LEFT JOIN Table t2
    ON t.CustomerId = t2.CustomerId
    AND t.ItemId = t2.ItemId
    AND t.Date > t2.Date
GROUP BY
    t.CustomerId
    ,t.Date

您可以使用LEFT SELF JOIN回复自己查看该客户是否在之前的某个日期购买了相同的商品。

我当然假设您可以在帖子中讨论日期时在查询中添加日期列。根据日期或共同身份对某些购买进行分组至关重要。