2016-12-15 12 views
-1

考えるpayer_idrecipient_idMySQLグループの数は2列ですか?

そして計算受け取った支払額が含まれてpayments表は次のようになります。

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(同じ人物の別のアカウントへのアカウントから転送)、そして1は、このような転送は2回はカウントされません世話をしているところの支払いもレコードを含めることができた場合:

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

最初のもの! 'UNION' 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 
関連する問題