好的,我已经看了这个并尝试了许多解决方案,但无法让它发挥作用。我有点像新手。这是我的原始查询 - 如果学生表中没有结果,如何让它为帐户返回0?
SELECT a.NAME
,count(s.student_sid)
FROM account a
JOIN inst i ON a.inst_sid = i.root_inst_sid
JOIN inst_year iy ON i.inst_sid = iy.inst_sid
JOIN student s ON iy.inst_year_sid = s.inst_year_sid
WHERE s.demo = 0
AND s.STATE = 1
AND i.STATE = 1
AND iy.year_sid = 16
AND a.account_sid IN (
20187987
,20188576
,20188755
,52317128
,20189249
)
GROUP BY a.NAME;
答案 0 :(得分:3)
使用外部连接,将该表上的条件移动到连接中:
null
s.student_sid
不计算student
值,plt.subplots()
如果没有行从Axes
加入,则会ax
。
答案 1 :(得分:1)
您需要LEFT JOIN
,然后SUM()
覆盖s.student_sid
不为空的群组:
select
a.name,
sum(case when s.student_sid is null then 0 else 1 end) as student_count
from account a
join inst i on a.inst_sid = i.root_inst_sid
join inst_year iy on i.inst_sid = iy.inst_sid
left join student s
on iy.inst_year_sid = s.inst_year_sid
and s.demo = 0
and s.state = 1
where i.state = 1
and iy.year_sid = 16
and a.account_sid in (20187987, 20188576, 20188755, 52317128, 20189249)
group by a.name;
这假设您要过滤的student
表中的所有字段都是可选的。如果您不想强制删除记录,例如s.state
不等于1,那么您需要将s.state=1
谓词移到WHERE
子句中。
如果由于某种原因,您获得了重复的学生ID并且学生被计算两次,那么您可以将聚合函数更改为:
count(distinct s.student_id) as student_count
...可以安全地执行count(distinct ...)
忽略空值。