2017-09-17 6 views
0

Ich versuche, die Anzahl der zwei Spalten mit einer WHERE-Klausel für jede Spalte einzeln in SQL zu bekommen.SQL - Filter auf zwei Spalten

Lässt meine Daten sagen sieht aus wie

person feature1 feature2 
a  1   1 
a  0   1 
a  1   1 
a  1   1 
a  0   0 
a  1   1 
b  0   1 
c  1   0 

Nun, ich die Daten von Person gruppieren möchten und die gruppierten Daten wie

person feature1 feature2 
    a  2   1 
    b  0   1 
    c  1   0 

ich die Anzahl der Nullen zählen wollte aussehen sollte jede Spalte pro Person. Wie kann ich dies über SQL tun?

+1

Feature 1 für Zeile b sollte 1 sein Ich denke –

Antwort

3

Sie können dazu die bedingte Aggregation verwenden. Bedingungen in sum geben 1 oder 0 zurück, je nach wahr oder falsch.

select person,sum(feature1=0),sum(feature2=0) 
from tbl 
group by person 

In Hive, sollten Sie die boolean werfen zurück int vor zusammen.

select person,sum(cast(feature1=0 as int)),sum(cast(feature2=0 as int)) 
from tbl 
group by person 
0

Hier können Sie case-Anweisung verwenden können nicht Null Funktionen für jede Person zu zählen

wählen Person, count (Fall, wenn feature1> 0 then 1 else null end) F1, count (Fall, wenn feature1 > 0 dann 1 sonst Null Ende) F2 aus Tabelle1 Gruppe nach Person;

+0

'else null' ist redundant – leftjoin

Verwandte Themen