2016-12-15 1 views
-1

Da eine payments Tabelle, die payer_id und recipient_idMySQL-Gruppe zählen von 2 Spalten?

Und Berechnung erhaltenen Zahlungen beinhaltet wäre:

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

Wie berechnen Sie: die Anzahl der Zahlungen, die ein Benutzer auf ist (ein Benutzer kann entweder eine Zahler_ID oder eine Empfänger_ID sein?

+2

Bitte erläutern Ihre Anforderung in einfachem Englisch. 'count (entweder payer_id oder recipient_id)' ist sinnlose Syntax. – shmosel

+1

Sie erhalten eine feste ID und möchten zählen, in wie vielen Zeilen in Zahlungen es erscheint? – maraca

Antwort

1

Wenn sie annehmen, dass Sie zählen mögen - für jede Person mit einer bestimmten ID - die Anzahl der Zahlungsvorgänge, an denen diese Person beteiligt war, dann sollte eine Gewerkschaft alle helfen:

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 

Wenn Zahlungen auch Datensätze enthalten können, wo payer_id = recipient_id (Übertragung von einem Konto auf ein anderes Konto von derselben Person), dann muss man darauf achten, dass solche Übertragungen nicht zweimal gezählt:

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

der erste! "UNION" ftw –

0

Eine Methode ist UNION ALL vor der Aggregation:

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

Ich denke, das Ihr Problem lösen kann:

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