我有一个表结构如下:
ID USER STATE
--- --- ---
1 U1 CA
2 U1 VA
3 U2 CT
4 U3 AZ
5 U2 CT
Run Code Online (Sandbox Code Playgroud)
该查询预计会获取所有用户并统计他们访问过的州,并打印访问过超过或等于 1 个州的用户。
我基本上试图进行一个查询来给我这个输出:
U1 2
Run Code Online (Sandbox Code Playgroud)
关于如何构造此查询有什么想法吗?
我已经尝试过以下方法,但我陷入了困境。
SELECT DISTINCT(USER)
FROM (SELECT DISTINCT(STATE) AS ST , USER
FROM TEMP_TABLE)
WHERE count(STATE) > 1;
Run Code Online (Sandbox Code Playgroud)
这就是 HAVING 子句的用途:过滤聚合数据。
SELECT user
,COUNT(DISTINCT state)
FROM temp_table
GROUP BY user
HAVING COUNT(DISTINCT state) > 1;
Run Code Online (Sandbox Code Playgroud)
如果 HAVING 子句让您感到不舒服,那么您可以按照您所展示的那样执行此嵌套查询,只需稍加调整即可。
SELECT user
FROM (SELECT user
,COUNT(DISTINCT state) AS state_cnt
FROM temp_table
GROUP BY user) t
WHERE state_cnt > 1;
Run Code Online (Sandbox Code Playgroud)
无论哪种情况,您都可以按用户分组并对状态进行计数,以获得“每个用户的状态”的答案。
| 归档时间: |
|
| 查看次数: |
12069 次 |
| 最近记录: |