算上HAVING子句有问题

时间:2016-06-09 14:53:05

标签: sql oracle

有人可以帮我解决这个问题吗?

我需要选择所有用户,每个人都有dt_user_login = null, 如果小组中有人有dt_user_login!= null,我就不需要任何人。

我的查询返回ORA-00937:不是单组组功能:

$(document).ready()

@Edit: 如果在这个组中我有5个用户,并且5个用户中有1个有dt_user_login = null,我的查询将不会返回任何人(0个用户)

如果在这个组中我有5个用户,并且所有5个用户都有dt_user_login = null,我的查询需要返回所有5个用户,得到它?

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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;

您应该测试所有解决方案,看看哪种解决方案最适合您的数据。有些人可能比其他人更有表现力。