2016-10-20 6 views
1

Die Abfrage, die ich beantworten möchte, ist "Wie viele Verkäufe über oder gleich 60 hat jede Person gemacht?"SQL - Gruppierung COUNT Ergebnisse

Meine Tabelle (Umsatz $):

SaleID name salevalue 
1 Steve 100 
2 John 50 
3 Ellen 25 
4 Steve 100 
5 Mary 60 
6 Mary 80 
7 John 70 
8 Mary 55 
9 Steve 65 
10 Ellen 120 
11 Ellen 30 
12 Ellen 40 
13 John 40 
14 Mary 60 
15 Steve 50 

Mein Code ist:

select name, 
COUNT(*) as 'sales above 60' 
from Sales$ 
group by salevalue, name 
having salevalue >= 60; 

Welche gibt:

Ellen 1 
John 1 
Mary 2 
Mary 1 
Steve 1 
Steve 2 

Die Informationen in dieser Mary & Steve korrekt ist beide haben 3 Verkäufe, aber ich werde vom HAVING-Befehl gezwungen, sie zu gruppieren.

Irgendwelche Ideen? Ich bin mir sicher, dass ich gerade falsch abgebogen bin.

+1

Entfernen 'salevalue' aus Ihrem GROUP BY. –

+0

Das Entfernen von 'salevalue' aus GROUP BY ergibt einen Fehler 'Msg 8121, Ebene 16, Status 1, Zeile 5 Die Spalte' Sales $ .salevalue 'ist in der HAVING-Klausel ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP enthalten ist BY-Klausel. Der Verkaufswert muss enthalten sein, um die "HAVING" -Anweisung zu beschwichtigen. – PJC83

+0

Ja, aber was willst du mit dieser HAVING-Klausel erreichen? – jarlh

Antwort

1

Sie können bedingte Aggregation für diesen Einsatz:

select name, 
     COUNT(case when salevalue >= 60 then 1 end) as 'sales above 60' 
from Sales$ 
group by name 

Auf diese Weise COUNT in berücksichtigen nur Aufzeichnungen salevalue >= 60 haben.

0

Ich habe die HAVING-Anweisung für eine WHERE getauscht und erreicht das gewünschte Ergebnis:

select name, count(*) 'sales above 50' from sales$ where salevalue >=60 group by name

(Glühbirne Moment nach der Einlieferung)

+1

Seien Sie vorsichtig. Wenn eine Person keinen Umsatz über oder gleich 60 hat, wird diese Person nicht in der Ergebnismenge berücksichtigt. Aber @ PJC83 fragt "Wie viele Verkäufe über oder gleich 60 hat jede Person gemacht?" – AlexSmet

+0

Ja, ein guter Punkt, meiner hat Nullen nicht berücksichtigt, und der Code von Giorgos Bestos hat es getan. Vielen Dank. – PJC83