Выбор группы с или без определенных условий во многих строках в SQL - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть такие данные:

ID     SomeVar
123      0
123      1
123      2
234      1
234      2
234      3
456      3
567      0
567      1

Я пытаюсь сгруппировать по своему идентификатору, чтобы вернуть все идентификаторы, у которых нет записи со значением 0.То есть мой выбор будет выглядеть так:

ID
234
456

Есть ли простой способ сделать это без создания таблицы подмножеств со всеми записями, не содержащими 0, а затем присоединения ее к полному набору данных, где таблицыне совпадают?

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Вы можете использовать агрегацию и having:

select id
from t
group by id
having min(somevar) > 0;

Это предполагает, что somevar никогда не бывает отрицательным.Если это возможно, то вы можете использовать немного более подробный:

select id
from t
group by id
having sum(case when somevar = 0 then 1 else 0 end) = 0;
0 голосов
/ 27 февраля 2019

Использование оператора учета с суммированием или суммированием, фильтрация по счету с использованием having:

select ID  
  from
      ( 
       select ID, count(case when SomeVar=0 then 1 end) cnt
         from mytable
        group by ID having count(case when SomeVar=0 then 1 end) = 0 
      ) s
;
0 голосов
/ 27 февраля 2019

Я обычно стараюсь избегать подзапросов, но вы можете использовать один для этого случая.Сделайте ту же группу по и убедитесь, что идентификатор не входит в подзапрос идентификаторов, которые имеют 0 для SomeVar.В этом случае Different будет делать то же самое и более эффективно, поэтому сначала я сделаю это:

SELECT DISTINCT ID
FROM [table_name]
WHERE ID NOT IN (
    SELECT ID FROM [table_name] WHERE SomeVar = 0
);

И если вы хотите получить другую информацию, используя GROUP BY:

SELECT ID, max(SomeVar), count(*), sum(SomeVar)
FROM [table_name]
WHERE ID NOT IN (
    SELECT ID FROM [table_name] WHERE SomeVar = 0
)
GROUP BY ID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...