我有下面的表格
guides users offers reservations manager_crm_issues
id id id offer_id issuable_id
user_id username guide_id issuable_type issuable_type我想提取的是
guide.id,
guide.username,
manager_crm_issues.count(issuuable_id)issuable_type的不同值是{Reservation,Offer,Guide},它对应于issuable_id。即,如果issuable_type =‘预留’,则issuable_id = reservation.id
问题是,我想计算所有发生在指南上的问题,指南链接到优惠,优惠链接到预订。
SELECT
a.guideId,
a.guideName,
count(case when cr.issuable_type = 'Reservation' and cr.issuable_id = a.rID THEN cr.id else 0 END),
count(case when co.issuable_type = 'Offer' AND co.issuable_id = a.offerId THEN co.id else 0 END),
count(case when cg.issuable_type = 'Guide' AND cg.issuable_id = a.guideId THEN cg.id else 0 END)
FROM
(SELECT
g.id AS guideId,
u.username AS guideName,
o.id as offerId,
r.id as rId
FROM guides g
INNER JOIN users u on u.id = g.user_id
INNER JOIN offers AS o on o.guide_id = g.id
INNER JOIN reservations AS r on r.offer_id = o.id) a
INNER JOIN manager_crm_issues cg ON cg.id = a.guideId
INNER JOIN manager_crm_issues co ON co.id = a.offerId
INNER JOIN manager_crm_issues cr ON cr.id = a.rId
group by 1,2我尝试像上面那样连接表,但结果似乎不准确。会非常感谢你的帮助。
发布于 2016-10-14 20:10:21
不知道这是否与您的问题有关,因为您没有说明问题是什么,但这并不像您认为的那样:
count(case
when cr.issuable_type = 'Reservation' and cr.issuable_id = a.rID THEN cr.id
else 0
END),count不计算空值,因此您的查询将计算所有内容。你想要的是
count(case
when cr.issuable_type = 'Reservation' and cr.issuable_id = a.rID THEN cr.id
else null
END),https://stackoverflow.com/questions/40037876
复制相似问题