2016-03-04 17 views
0

有點新的SQL,我有一個PostgreSQL的查詢,這是我在Postgres的9.x中的理解是,在默認情況下連接是INNER JOIN:將此查詢看作交集中元素的數量是否正確?

select count(*) 
from physical_promotions 
JOIN subscriptions ON physical_promotions.product_id = subscriptions.id 
JOIN users on subscriptions.user_id = users.id 
JOIN referrals ON referrals.referred_user_id = users.id 
where physical_promotions.coupon_id = '55'; 

是解釋這是所有物理的計數的正確方法coupon_id爲55的促銷與相應的訂閱交叉,並與相應的推薦相交併與相應的用戶相交?

編輯:

而且,我想算physical_promotions的數量 - 所以是正確的路要走呢?

這裏是我的新查詢:

select count(distinct physical_promotions.id) 
    from physical_promotions 
    JOIN subscriptions ON physical_promotions.product_id = subscriptions.id 
    JOIN users on subscriptions.user_id = users.id 
    JOIN referrals ON referrals.referred_user_id = users.id 
    where physical_promotions.coupon_id = '55'; 

回答

1

是的,其實,你也可以寫同樣的事情如下:

SELECT count(*) 
FROM physical_promotions, 
    subscriptions, 
    users, 
    referrals 
WHERE physical_promotions.product_id = subscriptions.id 
    AND subscriptions.user_id = users.id 
    AND referrals.referred_user_id = users.id 
    AND physical_promotions.coupon_id = 55 

爲清楚起見,我可能會建議明確指定連接類型。

另請注意,您可能不一定會得到獨一無二的促銷活動。例如,如果一個促銷有2個訂閱,您的結果將包含該促銷(以及用戶和推介)兩次。

+0

其實,我正在計算那次促銷產生的用戶數量 - 那麼正確的方式呢? – Nona

+0

真的,我試圖計算訂閱用戶或實際促銷活動的數量導致訂閱 – Nona

+1

嗯,我不知道您的業務邏輯,但似乎您正在尋找'count(distinct users.id) '。 如果你不用'count()'執行你的查詢,你可以看看結果並從那裏調整它。您可能還對[分組](http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-GROUPBY)感興趣。 – BenderBoy