SSMS SQL 识别只购买一件特定商品的购买者

SSMS SQL Identify purchases who only buy one specific item

我想找到购买时只购买过水果的客户。我的数据如下所示:

ID         purchase_date    product
22212      2021-06-03       Fruit
111999     2021-06-03       Fruit
111999     2021-06-03       Chocolate
56727      2019-05-03       Bread
30726      2019-05-03       Fruit
30726      2019-05-03       Chocolate
53899      2019-05-03       Fruit

我想要这个:

  ID         purchase_date
  22212      2021-06-03
  53899      2019-05-03   

想我需要一个 where 子句,按 ID 和 Purchase_date 分组?

你可以尝试用Having带条件聚合函数来写逻辑

  • 买水果(COUNT水果数大于1)
  • 没有 Fruit
  • 就不要购买任何产品

查询 1:

SELECT ID,purchase_date    
FROM T
GROUP BY  ID,purchase_date    
HAVING 
    COUNT(CASE WHEN product='Fruit' THEN 1 END) > 0 
AND
    COUNT(CASE WHEN product<>'Fruit' THEN 1 END) = 0 

Results:

|    ID | purchase_date |
|-------|---------------|
| 53899 |    2019-05-03 |
| 22212 |    2021-06-03 |
Select Id, purchase_date 
From your_table_name 
Where lower(product) = 'fruit'

您也可以使用相关查询。

SELECT DISTINCT T1.ID, T1.purchase_date
FROM <TableName> T1
WHERE T1.product = 'Fruit'
    AND NOT EXISTS (    SELECT 1 
                        FROM <TableName> T2 
                        WHERE Product <> 'Fruit' 
                        AND T1.ID = T2.ID 
                   )