我的表结构如下:
ID USER STATE
--- --- ---
1 U1 CA
2 U1 VA
3 U2 CT
4 U3 AZ
5 U2 CT
该查询应该占用所有用户并计算他们访问过的状态,并打印访问过多于或等于1状态的用户。
我试图基本上做一个查询来给我这个输出:
U1 2
关于如何构建此查询的任何想法?
我尝试了以下内容,但我对此感到困惑。
SELECT DISTINCT(USER)
FROM (SELECT DISTINCT(STATE) AS ST , USER
FROM TEMP_TABLE)
WHERE count(STATE) > 1;
答案 0 :(得分:2)
这就是HAVING子句的用途:过滤聚合数据。
SELECT user
,COUNT(DISTINCT state)
FROM temp_table
GROUP BY user
HAVING COUNT(DISTINCT state) > 1;
如果HAVING子句让你感到不舒服,那么你可以像你展示的那样进行这种嵌套查询,只需要进行一些小的调整。
SELECT user
FROM (SELECT user
,COUNT(DISTINCT state) AS state_cnt
FROM temp_table
GROUP BY user) t
WHERE state_cnt > 1;
在任何一种情况下,您都按用户分组并计算状态以获得“每个用户的状态”的答案。