2016-10-20 2 views
1

내가 대답하려고하는 질문은 '각 사람이 만든 매출이 60 명 이상입니까?'입니다.SQL - 그룹화 COUNT 결과

내 테이블 (판매 $) :

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 

정보는 모두가 그 마리아에 & 스티브 올바른지 3 개의 판매, 그러나 나는 그들을 지목하는 명령에 의해 강제된다.

아이디어가 있으십니까? 나는 방금 잘못 돌았다고 확신한다.

+1

제거'salevalue' (전구 순간 게시 후) 당신의 GROUP BY에서. –

+0

GROUP BY에서'salevalue'를 삭제하면'Msg 8121, Level 16, State 1, Line 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