2016-12-15 47 views
-1

鑑於一個payments表,其中包括payer_idrecipient_idMySQL組數由2列組成?

計算收到的款項爲:

select COUNT(*) as payer_count, recipient_id 
FROM payments 
GROUP BY recipient_id 
ORDER BY payer_count DESC 

如何計算:,用戶是支付的數目(用戶可以是payer_id或recipient_id)?

+2

請解釋你的要求用簡單的英語。 'count(payer_id或recipient_id)'是無意義的語法。 – shmosel

+1

您會得到一個固定ID,並且想要計算它顯示的付款行數?第一個是 – maraca

回答

1

如果假設你要計算 - 每個人有一個特定的ID - 此人蔘與的付款交易次數,那麼工會應該全力幫助:

select person_id, count(*) 
from ((select payer_id as person_id from payments) union all (select recipient_id as person_id from payments)) paymentsOfPerson 
group by person_id 
order by person_id DESC 

如果支付還可以包含的記錄payer_id = recipient_id(從一個賬戶轉移到同一個人的另一個帳戶),然後一個人在那裏照顧這類轉讓不計算兩次:

select person_id, count(*) 
from ((select payer_id as person_id from payments where payer_id != recepient_id) union all (select recipient_id as person_id from payments)) paymentsOfPerson 
group by person_id 
order by person_id DESC 
+0

! '聯合'ftw –

0

一種方法是UNION ALL聚合前:

select id, count(*) as cnt, sum(recipient) as recipient_cnt, 
     sum(payer) as payer_cnt 
from ((select recipient_id as id, 1 as recipient, 0 as payer 
     from payments 
    ) union all 
     (select payer_id, 0, 1 
     from payments 
    ) 
    ) i 
group by id; 
0

我認爲這可以解決你的問題:

SELECT COUNT(*) as payments_count 
    , COUNT(DISTINCT payer_id) distinct_payers 
    , recipient_id 
FROM payments 
GROUP BY recipient_id 
ORDER BY payer_count DESC