2017-10-23 3 views
1

Ich arbeite an einer Anwendung, wo ich eine Abfrage für eine Tabelle schreiben muss, die mehrere Spalten zählen in einer einzigen Abfrage zurückgegeben wird.Get Multi Columns Count in Einzelabfrage

Nach Forschung konnte ich eine Abfrage für eine einzelne sourceId entwickeln, aber was passiert, wenn ich Ergebnis für mehrere sourceIds will.

select '3'as sourceId, 
    (select count(*) from event where sourceId = 3 and plateCategoryId = 3) as TotalNewCount, 
    (select count(*) from event where sourceId = 3 and plateCategoryId = 4) as TotalOldCount; 

Ich brauche TotalNewCount und TotalOldCount für mehrere Quelle Ids, zum Beispiel (3,4,5,6)

Kann jemand Hilfe zu bekommen, wie kann ich meine Abfrage revidieren eine Ergebnismenge zurück drei Spalten mit Daten aus allen Quellen in der Liste (3,4,5,6)

Dank

+0

Verwenden Sie MySQL oder Vertica? Bitte kennzeichnen Sie Ihre Frage entsprechend. –

+0

Ich benutze beide. Wir testen derzeit die Skalierbarkeit. –

Antwort

0

Sie alle Quelle-IDs auf einmal tun können:

select source_id 
     sum(case when plateCategoryId = 3 then 1 else 0 end) as TotalNewCount, 
     sum(case when plateCategoryId = 4 then 1 else 0 end) as TotalOldCount 
from event 
group by source_id; 

Verwenden Sie eine where (vor der group by), wenn Sie die Quell-IDs begrenzen möchten.

Hinweis: Obiges funktioniert sowohl in Vertica als auch in MySQL, und Standard-SQL sollte in jeder Datenbank funktionieren.

+0

Danke @Gordon. Es scheint in der Vertikalen zu arbeiten. –