我要做的是只显示计数值大于3的行。
url(r'^(?P<question_id>[0-9]+)/$', ...)
例如,这个查询可能会返回5行,在“工作人员数量”下它会说例如5,4,3,2,1但我只想让它返回计数为3的那些行以上。有可行的方法吗?
答案 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)