求可查询归属两个州的客户记录的SQL语句
需求说明
现有客户数据表如下:
| cust_id | state |
|---|---|
| 1 | CA |
| 2 | IL |
| 3 | SC |
| 1 | PA |
| 3 | IA |
| 4 | MO |
| 5 | VA |
| 4 | NY |
需要编写SQL查询语句,返回所有归属两个及以上州的cust_id对应的全部记录,期望输出结果如下:
| cust_id | state |
|---|---|
| 1 | CA |
| 1 | PA |
| 3 | SC |
| 3 | IA |
| 4 | MO |
| 4 | NY |
解决方案
方法1:子查询+分组筛选
先通过分组筛选出关联多个州的cust_id,再关联原表获取对应记录:
SELECT t.cust_id, t.state FROM your_table_name t INNER JOIN ( SELECT cust_id FROM your_table_name GROUP BY cust_id HAVING COUNT(DISTINCT state) >= 2 ) sub ON t.cust_id = sub.cust_id ORDER BY t.cust_id, t.state;
方法2:窗口函数(适用于MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的数据库)
通过窗口函数计算每个cust_id对应的州数量,直接筛选符合条件的记录:
SELECT cust_id, state FROM ( SELECT cust_id, state, COUNT(DISTINCT state) OVER (PARTITION BY cust_id) AS state_count FROM your_table_name ) t WHERE state_count >= 2 ORDER BY cust_id, state;
注:请将语句中的your_table_name替换为实际的表名。
内容的提问来源于stack exchange,提问作者hellopa1
相关产品推荐
相关产品推荐

