我有表class B(A):
def __init__(self, *args, **kwargs):
super(B, self).__init__(*args, **kawargs)
,contracts
和party
(按从属顺序排列)。我想选择某些合同的当事人的剂量信息。这是我的疑问:
doses
它工作正常,但如果表select contract_number, comp, ml, party.room,
min(doses.begintime), max(doses.endtime),
sum(timestampdiff(second, doses.begintime, doses.endtime))/3600.
from doses
join party
on party.id=doses.party_id
join contracts
on contracts.id=party.contract_id
where contracts.id in(97,144,145)
group by party.id
order by contract_number, party.room;
中doses
等于party_id
的记录没有,那么这些记录就不会显示。
上面的查询给出了75个结果。如果不提party.id
,则有103行:
doses
如何修改我的查询以包含这些省略的结果并将min,max,sum设置为零?
答案 0 :(得分:3)
使用LEFT OUTER JOIN
select contract_number, comp, ml, party.room,
min(doses.begintime), max(doses.endtime),
sum(timestampdiff(second, doses.begintime, doses.endtime))/3600.
from doses
LEFT OUTER JOIN party
on party.id=doses.party_id
join contracts
on contracts.id=party.contract_id
where contracts.id in(97,144,145)
group by party.id
order by contract_number, party.room;
这将根据剂量数据返回最小值,最大值和总和。如果你想在没有匹配的聚会参赛作品时将这些作为零,那么你可以做以下的事情:
CASE party.room WHEN NULL THEN 0 ELSE min(doses.begintime) END
不确定Case的语法,但您可以查看它here