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
| 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
)
我想找到购买时只购买过水果的客户。我的数据如下所示:
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
| 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
)