2016-12-14 60 views
0

我不確定如何用我的問題來解釋我的問題,因爲我是SQL新手。它不應該太難。這是場景。來自多個表的SQL語句組數據在一個下

我有3個表:

客戶

id, 
contact 

subscribers_from_x

customer_id 
subscriber_name 

subscribers_from_y

customer_id, 
subscriber_name 

這裏的問題:

現在,我要選擇

customer.id

次數/ customer.id的計數發生在subscribers_from_x

customer.id中發生的次數/次數number_from_y

從這3個表

我已經試過GROUP_BY COUNT(*)而不是計算出來。感謝

回答

1

我可能會使用兩個單獨的子查詢其合計數由用戶在X和Y表去:

SELECT t1.id, 
     t1.contact, 
     COALESCE(t2.x_count, 0) AS subscribers_from_x, 
     COALESCE(t3.y_count, 0) AS subscribers_from_y 
FROM customers t1 
LEFT JOIN 
(
    SELECT customer_id, COUNT(*) AS x_count 
    FROM subscribers_from_x 
    GROUP BY customer_id 
) t2 
    ON t1.id = t2.customer_id 
LEFT JOIN 
(
    SELECT customer_id, COUNT(*) AS y_count 
    FROM subscribers_from_y 
    GROUP BY customer_id 
) t3 
    ON t1.id = t3.customer_id 
+0

我將測試這一點,並獲得回覆謝謝 – tsaebeht

+0

如果作品可以接受 – tsaebeht

+0

@Tim Biegeleisen,子查詢可能會導致性能問題嗎?我通常更喜歡通過子查詢加入。請讓我知道,這樣我才能朝着正確的方向前進 –

1
SELECT DISTINCT(users.id),count(x.customer_id) 'X count',count(y.customer_id) 'Y Count' 
     FROM customers 
      LEFT JOIN subscribers_from_x x ON customers.id = x.customer_id 
      LEFT JOIN subscribers_from_y y ON customers.id = y.customerid 
     GROUP BY customers.id,subscribers_from_x.pk_col -- primary key col of subscribers_from_x 

它會給你所需的輸出

+1

如果某個客戶在每個x和y表中出現多次,則此方法可能會導致重複計數。 –

+0

是的,這就是爲什麼使用'group by customers.id,subscribers_from_x.pk_col' –

+0

如果你想在沒有子查詢的單一連接中做到這一點,你需要找到解決重複計數問題的方法。我同意子查詢不是最優的,但是他們有時間和地點。這可能是這樣的時間和地點。 –