SQL查询:如何筛选使用过两种不同货币支付的客户ID
问题描述
现有销售交易表sales_table存储了数十万条交易数据,表结构及样例数据如下:
select customer_id, currency, price from sales_table
样例数据:
| customer_id | currency | price |
|---|---|---|
| 1001 | CHF | 50 |
| 1001 | EUR | 35 |
| 1002 | EUR | 40 |
| 1003 | AUD | 25 |
需求:编写SELECT查询语句,仅返回使用过两种不同货币支付的客户ID,以上述样例数据为例,正确返回结果应为customer_id 1001。
实现查询语句
SELECT customer_id FROM sales_table GROUP BY customer_id HAVING COUNT(DISTINCT currency) = 2;
逻辑说明
- 先通过
GROUP BY customer_id把所有交易按客户ID分组,每个分组对应单个客户的全部交易记录 - 用
COUNT(DISTINCT currency)统计每个客户使用的不重复货币种类,避免同一客户同币种有多笔交易时统计值虚高 - 通过
HAVING子句对分组后的统计结果做过滤,仅保留币种数量恰好为2的客户ID
如果需要查询使用过至少两种不同货币的客户,只需把条件= 2修改为>= 2即可。
内容的提问来源于stack exchange,提问作者Luc
相关产品推荐
相关产品推荐

