Sql 显示组计数为1的其他列
假设我有一个表Sql 显示组计数为1的其他列,sql,group-by,count,subquery,window-functions,Sql,Group By,Count,Subquery,Window Functions,假设我有一个表Students,只有两列LastName和FirstName。我知道我可以通过以下方式获得所有只有1名的LastNames: select LastName from Students group by LastName having count(*) = 1 但是如果我还想显示这些行的名字呢?您可以使用相关子查询进行筛选: select s.* from students s where (select count(*) from students s1 where s1.
Students
,只有两列LastName
和FirstName
。我知道我可以通过以下方式获得所有只有1名的LastName
s:
select LastName from Students group by LastName having count(*) = 1
但是如果我还想显示这些行的名字呢?您可以使用相关子查询进行筛选:
select s.*
from students s
where (select count(*) from students s1 where s1.LastName = s.LastName) = 1
或者,如果您有一个主列,您可以使用不存在:
select s.*
from student s
where not exists (
select 1 from students s1 where s1.LastName = s.LastName and s1.id <> s.id
)
你也可以这样做
Select * from Students where lastname in (Select lastname from Students group by lastname having count(*) =1)
只需将其添加到选择中
:
select s.LastName, min(s.firstname)
from Students s
group by s.LastName
having count(*) = 1;
如果只有一行匹配,则min()
返回该行上的值。您需要使用任何可以返回所需值的聚合函数来获取该值。Min,Max,first_value(),ir string_agg()在其他用例中,您可能希望所有名称都使用lastname
select LastName,
first_value(firstname) over (order by firstname) firstname,
Min(firstname)
from Students
group by LastName having count(*) = 1
我自己找到了另一个:
with LastNames as (
select LastName from Students group by LastName having count(*) = 1
)
select LastName, FirstName from Students
where LastName in (select LastName from LastNames)
您是否尝试过在select语句中包含firstname,如下所示:select LastName,firstname from STUDIERS group by LastName having count(*)=1@LemuelBotha,您不能包含不是聚合函数或不在group by COLUMNS中的列。是的,您是对的
with LastNames as (
select LastName from Students group by LastName having count(*) = 1
)
select LastName, FirstName from Students
where LastName in (select LastName from LastNames)