Sql 计算每个客户端的项目数并列出这些项目

Sql 计算每个客户端的项目数并列出这些项目,sql,Sql,我在我的任务中有关系: File (fid, fname, description, status, cname, lname) 整个DB是一家律师事务所,fid代表文件ID、cname-客户名称、lname-律师名称。其余的目前都无关紧要 我想做的是: Find a client who has only 1 file and return the file and the client name. 我很容易找到哪位客户: select file.cname, count(fid), f

我在我的任务中有关系:

File (fid, fname, description, status, cname, lname)
整个DB是一家律师事务所,fid代表文件ID、cname-客户名称、lname-律师名称。其余的目前都无关紧要

我想做的是:

Find a client who has only 1 file and return the file and the client name.
我很容易找到哪位客户:

select file.cname, count(fid), 
from file
group by cname
having count(fid)=1
然而,如果我将fid添加到这个查询中,我会得到一个糟糕的结果

我能做什么


谢谢。

如果只有一个值,那么您可以使用
min()
max()
获取该值:

select f.cname, min(f.fid) as fid
from file f
group by f.cname
having count(f.fid) = 1;

您不需要在
select
中指定
count()
来在
having
子句中使用它(在大多数数据库中……有例外,但我怀疑您使用的是Hive)。

如果只有一个值,那么您可以使用
min()
max()
来获取它:

select f.cname, min(f.fid) as fid
from file f
group by f.cname
having count(f.fid) = 1;

having
子句中使用
having
不需要在
select
中指定
count()
(在大多数数据库中……存在例外情况,但我怀疑您使用的是Hive)。

如果要选择count=2、3的客户端,等,可以使用下面的查询,只需调整最后一行的编号:

SELECT file.cname, file.fname
FROM file
WHERE file.cname IN
(SELECT file.cname
FROM file
GROUP BY file.cname
HAVING COUNT(fid) = 2);

Alan如果要选择计数为2、3等的客户端,可以使用下面的查询,只需调整最后一行中的数字即可:

SELECT file.cname, file.fname
FROM file
WHERE file.cname IN
(SELECT file.cname
FROM file
GROUP BY file.cname
HAVING COUNT(fid) = 2);

因为你的姓氏恰好是@Gordon上课的学校的名字,所以得票最多。计数=2是另一回事!试试看!如果你想不出答案,请将你尝试过的问题作为一个新问题发布,我们将尽力帮助你。因为你的姓氏恰好是@Gordon授课的学校的名称,所以我们将投票表决。计数=2是另一回事!试试看!如果你想不出来,就把你试过的作为一个新问题发布,我们会尽力帮助你。@Alan。这将是一个不同的问题,你应该作为一个问题而不是在评论中提问。@Alan。这将是一个不同的问题,你应该作为一个问题而不是在评论中提问。