SQL, чтобы найти, какие члены имеют только нулевые записи
Я ломаю голову, пытаясь понять, какой группой и / или count()
формирование помочь с этим, но в настоящее время нарисовали пустым.
Рассмотрим таблицу:
PersonId | PlaceName
---------+----------
1 | NULL
1 | NULL
2 | NULL
2 | Las Vegas
3 | London
4 | NULL
4 | NULL
4 | NULL
Я ищу людей, которые не удосужились заполнить "названия мест", поэтому я хочу, чтобы мой вывод выглядел так:
PersonId
--------
1
4
На самом деле я присоединюсь к некоторым другим столам, чтобы вытащить информацию о каждом "негодяйском" человеке, но суть моей проблемы - та, что выше.
5 ответов
Решение
Используйте следующий запрос:
SELECT PersonId
FROM TheTable
GROUP BY PersonId
HAVING COUNT(PlaceName) = 0
COUNT()
агрегатная функция игнорирует NULL
s, поэтому правильный результат должен быть возвращен.
select distinct t1.id
from test t1
LEFT JOIN
(
select id, count(name) nm
from test
where name is not null
group by id
) x
on t1.id = x.id
where x.nm is null
Смотрите SQL Fiddle с демо
select PersonId
from MyTable
group by PersonId
having count(case when PlaceName is not null then 1 end) = 0
SELECT DISTINCT PersonId
FROM MyTable t
WHERE NOT EXISTS(SELECT 1 FROM MyTable WHERE PersonId = t.PersonId AND PlaceName is not null)
Я бы предложил следующее:
select distinct a.personid
from tablename a
left outer join tablename b
on a.personid=b.personid
and b.placename is not null
where b.personid is null
order by personid