SQL - 如何仅显示Count Aggregate Function的某些值?

时间:2016-05-20 22:04:13

标签: sql oracle select count

我要做的是只显示计数值大于3的行。

url(r'^(?P<question_id>[0-9]+)/$', ...)

例如,这个查询可能会返回5行,在“工作人员数量”下它会说例如5,4,3,2,1但我只想让它返回计数为3的那些行以上。有可行的方法吗?

2 个答案:

答案 0 :(得分:3)

使用having:

select pharm_name, count(1) as "Number of Staff"
from pharmacies p, pharmacy_staff_store pss
where p.pharm_id = pss.pharmacy_id    
group by pharm_name
having count(1) > 3

或者你可以这样写:

select * from (
select pharm_name, count(1) as x
from pharmacies p, pharmacy_staff_store pss
where p.pharm_id = pss.pharmacy_id
group by pharm_name)
where x>3

答案 1 :(得分:0)

首先不要使用WHERE join 推广使用explict JOIN sintaxis,Aaron Bertrand撰写了一篇很好的文章Bad habits to kick : using old-style JOINs

然后使用HAVING从结果中过滤。

SELECT pharm_name, 
       Count(1) AS "Number of Staff" 
FROM   pharmacies p
JOIN   pharmacy_staff_store pss 
  ON   p.pharm_id = pss.pharmacy_id 
GROUP  BY pharm_name
HAVING COUNT(1) > 3; 

如果有人更改了你的查询没有注意到的数据库中字段的顺序,并且会显示错误的行为,我也不会使用COUNT(1)。使用Count(fieldname)