Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 指望HAVING子句的麻烦_Sql_Oracle - Fatal编程技术网

Sql 指望HAVING子句的麻烦

Sql 指望HAVING子句的麻烦,sql,oracle,Sql,Oracle,有人能帮我解答这个问题吗 我只需要选择所有用户,每个人都有dt_user_login=null, 如果组中有人有dt_用户登录!=空,我不需要任何人。 我的查询返回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_

有人能帮我解答这个问题吗

我只需要选择所有用户,每个人都有dt_user_login=null, 如果组中有人有dt_用户登录!=空,我不需要任何人。

我的查询返回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 )
@编辑: 如果在此组中我有5个用户,并且5个用户中有1个的dt_user_login=null,则我的查询将不会返回任何人(0个用户)


如果在此组中我有5个用户,并且所有5个用户的dt_user_login=null,则我的查询需要返回所有5个用户,明白吗?

您可以搜索没有一行dt_user_login不为null的组

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'

下面是一个使用分析函数计算非空dt_用户登录数的替代解决方案:

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;

您应该测试所有解决方案,看看哪一个最适合您的数据。有些可能比其他更有效。

用一个例子编辑了我的问题,如果组中的某个用户的dt=null,我不想返回任何人。在我的查询中,只有当组中的所有用户都为null时,查询才会返回所有这些用户。这就是你要找的,不是吗?不幸的是,返回了ORA-00904:“id\U user\U group”:第行的标识符无效,其中id\U user\U group='003008''。哎呀,我在内部查询中漏掉了那个列。已经更新了我的答案中的查询,所以现在应该可以正常工作了。