2017-10-22 47 views
2

從表中不同的值我有一個表結構如下:如何計算在甲骨文

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

@KenWhite - 我在我的第一篇文章後編輯我的問題,並且您的評論進來了。我理解您提到的那些觀點。我已經做了必要的補償(你在編輯時發現了它) – Surya

回答

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; 

在這兩種情況下,你的用戶和組計數狀態得到的答案「每個用戶的狀態。」

+0

感謝您的幫助。 – Surya