2016-06-09 2 views
1

Может ли кто-нибудь помочь мне с этим запросом?Проблема с подсчетом предложения HAVING

Мне нужно, чтобы выбрать все пользователи только со всеми, имеют dt_user_login = нуль, если кто-то в группе есть 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: Если в этой группе у меня есть 5 пользователей и 1 из 5 пользователей имеет dt_user_login = нуль, мой запрос не возвратит кого (0 пользователей)

Если в этой группе у меня есть 5 пользователей, и все 5 пользователей имеют dt_user_login = нуль, мой запрос должен возвращать все 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

В моем запросе только если все пользователи в группе равны null, запрос вернет всех этих пользователей. Это то, что вы ищете, не так ли? – 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 »где id_user_group = '003008' '" – deveduardo

+0

Упс, я пропустил эту колонку из внутреннего запроса. Обновите запрос в своем ответе, чтобы он теперь корректно работал. – Boneist

Смежные вопросы