2016-12-15 34 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