Выберите всех лиц, которые НЕ присутствуют постоянно в SQL - PullRequest
0 голосов
/ 05 августа 2020

У меня есть таблица «Лица» со следующим содержанием:

year    name
2015    John
2016    John
2017    John
2015    Mary
2015    Jennifer
2016    Jennifer
2015    Lisa
2016    Lisa
2017    Lisa

Как я могу получить всех лиц, которые не присутствуют постоянно в течение всех лет?

Ответ должен быть:

2015    Mary
2015    Jennifer
2016    Jennifer

Ответы [ 4 ]

2 голосов
/ 05 августа 2020
• 1000 * Демо
0 голосов
/ 05 августа 2020

Я бы предложил оконные функции. Предполагая отсутствие дубликатов на имя:

select p.*
from (select p.*,
             count(*) over (partition by name) as cnt_name,
             count(distinct year) over () as cnt_years
      from persons p
     ) p
where cnt_name <> cnt_years;
0 голосов
/ 05 августа 2020

Вы можете использовать запрос ниже:

SQLfiddle

select a.name, a.year1 
from name_test a 
inner join
(select name, count(year1) 
 from name_test
group by name 
 having count(year1) < (select count(distinct year1) from name_test))
b on (a.name = b.name);
0 голосов
/ 05 августа 2020

Вы можете использовать запрос ниже,

select * from persons p1
where exists
(select name, count(1) from persons p2 where p1.name=p2.name group by name having count(1) <
(select count(distinct year) from persons));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...