2016-10-14 3 views
0

私が抽出したいです何postgresqlで情報を抽出する条件が2つ以上ある場合は、どのようにクエリを書くのですか?

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の個別の値は{予約、オファー、ガイド}されている、そしてそれがissuable_idに対応しています。その後、issuable_idは= reservation.idで、私はすべての問題をカウントしたい

質問がガイドに起こった、とガイドを提供するためにリンクされている すなわちissuable_type =「予約」の場合は、オファーが予約にリンクされています。

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 

私は上記のような表を結合しようとしましたが、結果は不正確です。 本当に助けていただければ幸いです。

+0

2つのステップで行います:(1)guidenameと一緒にguideidを得るために 'join'で' select'を行います。 (2) 'GROUP BY'と' count(*) 'を組み合わせて追加します。 – jarlh

+2

**あなたの質問に[編集] **し、いくつかのサンプルデータとそのデータに基づいて予想される出力を追加します。 [_Formatted_](http://stackoverflow.com/editing-help#code)**テキスト**お願い、[スクリーンショットなし](http://meta.stackoverflow.com/questions/285551/why-may-i -not-upload-images-of-code-on-so-ask-a-question/285557#285557) –

答えて

0

これはあなたの問題に関連している場合は、問題が何であるか言っていないので分からないのですが、これは、あなたがそれがないと思う何をしていません。

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), 
関連する問題