2016-06-09 46 views
1

有人可以幫我處理這個查詢嗎?計算HAVING子句的麻煩

,我需要選擇所有用戶只能與大家有dt_user_login = NULL, 如果有人組中已經dt_user_login!= NULL,我不需要任何人

我的查詢返回ORA-00937:不是一個單組基函數:

SELECT ID_USER 
FROM USERS 
WHERE ID_USER_GROUP = '003008' 
    HAVING COUNT(ID_USER) = 
       (SELECT COUNT(ID_USER) FROM USERS WHERE ID_USER_GROUP = '003008' AND DT_USER_LOGIN IS NOT NULL) 

@Edit: 如果在這組i有5個用戶,和1 5的用戶具有dt_user_login = NULL,我的查詢將不會這個羣體,我有5個用戶在返回(0用戶)

如果,所有5個用戶有dt_user_login = NULL,我的查詢需要返回所有的5個用戶,懂嗎?

回答

1

您可以搜索組,其中有不符合DT_USER_LOGIN行不爲空

SELECT U1.ID_USER 
FROM USERS U1 
WHERE NOT EXISTS (SELECT 1 FROM USERS U2 
        WHERE U2.DT_USER_LOGIN IS NOT NULL 
        AND U1.ID_USER_GROUP = U2.ID_USER_GROUP 
       ) 
AND U1.ID_USER_GROUP = '003008' 
+0

用一個例子編輯我的問題,如果組中的某個用戶有dt = null,我不想回報任何人。 – deveduardo

+0

在我的查詢中,只有當組中的所有用戶都爲空時,查詢纔會返回所有這些用戶。這就是你要找的,不是嗎? – vercelli

+1

是的,那個作品的男人,你是最好的非常感謝你。 – deveduardo

0

下面是使用分析功能不空dt_user_logins的計數的替代解決方案:

select id_user 
from (select id_user, 
       id_user_group, 
       count(case when dt_user_login is not null then 1 end) over (partition by id_user_group) not_null_dt_user_login_count 
     from users) 
where id_user_group = '003008' 
and not_null_dt_user_login_count = 0; 

您應該測試所有解決方案,以查看哪一個最適合您的數據。有些人可能比其他人更高效。

+0

不幸的是,返回的ORA-00904:「id_user_group」:無效標識符 on line「where id_user_group ='003008''」 – deveduardo

+0

哎呀,我錯過了內部查詢中的那列。已經在我的答案中更新了查詢,所以它現在應該可以正常工作。 – Boneist