我的任务中有关系:
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,我会得到一个糟糕的结果。
我该怎么办?
感谢。
答案 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);