如何从Oracle中的表中计算不同的值

如何从Oracle中的表中计算不同的值,oracle,oracle11g,Oracle,Oracle11g,我的表格结构如下: ID USER STATE --- --- --- 1 U1 CA 2 U1 VA 3 U2 CT 4 U3 AZ 5 U2

我的表格结构如下:

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;

这就是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;

在任何一种情况下,您都可以按用户分组并计算状态,以获得“每个用户的状态”的答案。

@KenWhite-我在第一篇帖子后编辑了我的问题,您的评论收到了。我理解你提到的那些观点。我已经做了必要的编辑(你在我编辑的时候抓到了)