我有下表,其中包含用户名和站点信息:
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。
答案 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;