首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在postgresql中有两个以上的条件来提取信息时,如何编写查询?

在postgresql中有两个以上的条件来提取信息时,如何编写查询?
EN

Stack Overflow用户
提问于 2016-10-14 15:55:34
回答 1查看 41关注 0票数 0

我有下面的表格

代码语言:javascript
复制
guides    users     offers      reservations     manager_crm_issues
id        id        id          offer_id         issuable_id
user_id   username  guide_id    issuable_type    issuable_type

我想提取的是

代码语言:javascript
复制
guide.id,
guide.username,
manager_crm_issues.count(issuuable_id)

issuable_type的不同值是{Reservation,Offer,Guide},它对应于issuable_id。即,如果issuable_type =‘预留’,则issuable_id = reservation.id

问题是,我想计算所有发生在指南上的问题,指南链接到优惠,优惠链接到预订。

代码语言:javascript
复制
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

我尝试像上面那样连接表,但结果似乎不准确。会非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-10-14 20:10:21

不知道这是否与您的问题有关,因为您没有说明问题是什么,但这并不像您认为的那样:

代码语言:javascript
复制
count(case 
    when cr.issuable_type = 'Reservation' and cr.issuable_id = a.rID THEN cr.id 
    else 0 
END),

count不计算空值,因此您的查询将计算所有内容。你想要的是

代码语言:javascript
复制
count(case 
    when cr.issuable_type = 'Reservation' and cr.issuable_id = a.rID THEN cr.id 
    else null 
END),
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40037876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档