2016-10-20 21 views
1

私が答えようとしている質問は、「1人あたり60人以上の売り上げがありますか?SQL - グループ化カウント結果

私のテーブルには、(販売$):

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 

私のコードは次のとおりです。与え

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

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

を情報の両方持っているメアリー&スティーブに正しいですしかし、私はHAVINGコマンドでそれらをグループ化することを余儀なくされています。

アイデア?私はちょうど間違った方向転換をしたと確信しています。

+1

削除 'salevalue'(電球モーメント投稿後に)あなたのGROUP BYから。 –

+0

GROUP BYから 'salevalue'を削除するとエラー' Msg 8121、レベル16、状態1、行5 'Sales $ .salevalue'列は集計関数またはGROUPに含まれていないため、HAVING句では無効ですBY節。 'HAVING'ステートメントを緩和するには、salevalueをインクルードする必要があります。 – PJC83

+0

はい、そのHAVING節で何を達成しようとしていますか? – jarlh

答えて

1

あなたはこのために条件付き集約を使用することができます。

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

こうCOUNTのみレコードがsalevalue >= 60を持つ配慮になります。

0

私はWHEREためHAVING文をスワップし、望ましい結果を達成した:

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

+1

注意してください。 60歳以上の売上がない人がいる場合、その人は結果セットに含まれません。しかし、@ PJC83は、「60人以上の売り上げはどの人が何人いるのですか? – AlexSmet

+0

はい、良い点は、鉱山はゼロを説明しておらず、Giorgos Bestosのコードがありました。ありがとう。 – PJC83

関連する問題