Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 显示组计数为1的其他列_Sql_Group By_Count_Subquery_Window Functions - Fatal编程技术网

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)