SQL查询 - 查找所有NULLS

时间:2017-04-11 15:51:33

标签: sql tsql

我有下表,其中包含用户名和站点信息:

Username   Site
jbrown     NULL
jbrown     NULL
jbrown     NULL
msmith     3
msmith     12
msmith     NULL 
ptodd      18
ptodd      16 
ptodd      NULL
jdrem      3
jdrem      NULL
jdrem      NULL

我需要做的是获取具有针对其站点的所有NULLS的用户名,或者任何位于3的任何站点的用户名。因此,在这种情况下,输出将是:

jbrown
msmith
jdrem

请注意,ptodd不在最终结果中,因为它们不是具有3的网站。

我正在考虑一个小组,但不确定如何说基于用户名的所有NULLS或任何3。

4 个答案:

答案 0 :(得分:3)

您可以使用group by和条件聚合。

select username
from tablename
group by username
having count(*)=count(case when site is null then 1 end) 
or count(case when site=3 then 1 end)>=1

答案 1 :(得分:1)

我想这可能与其他人太相似了但是......

SELECT   [Username] 
FROM     Table
GROUP BY [Username]
HAVING   MAX([Site]) IS NULL OR 
         COUNT(CASE WHEN [Site] = 3 THEN 1 END) > 0

答案 2 :(得分:0)

条件聚合可能会更快,但这是另一种选择:

使用not exists(...) or Site = 3

select distinct Username
from t
where not exists (
  select 1
  from t as i
  where i.username = t.username
    and i.site is not null
    )
  or Site = 3

答案 3 :(得分:0)

我喜欢用我称之为"比#34;更好sql principal。在哪里确保没有什么"比#34更好。

select username, site 
from table_name t
left join table_name betterThan on betterThan.site is not null and betterThan.username = t.username and betterThan.id <> t.id
where (t.site is null or t.site = 3) and betterThan.id is null;