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

时间:2016-07-30 15:32:02

标签: sql

我的任务中有关系:

File (fid, fname, description, status, cname, lname)

整个数据库是一家律师事务所,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,我会得到一个糟糕的结果。

我该怎么办?

感谢。

3 个答案:

答案 0 :(得分:2)

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

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

您不需要在count()中指定select,以便在having子句中使用它(在大多数数据库中......有例外情况,但是我怀疑你是否正在使用Hive)。

答案 1 :(得分:2)

select file.cname, count(fid), max(fid) 
from file
group by cname
having count(fid)=1

答案 2 :(得分:1)

Alan如果你想选择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);