如何计算Oracle

时间:2017-10-22 00:38:21

标签: oracle oracle11g

我的表结构如下:

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;

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;

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