2009-09-23 2 views
0

설문 조사 데이터로 작업하고 있습니다. 본질적으로, 나는 한 위치에 대한 질문에 대한 총 응답을 계산하고, 그 총계를 사용하여 각각의 특정 응답이 모든 응답의 몇 퍼센트를 만드는지 알고 싶다. 그런 다음 위치별로 결과를 그룹화합니다.MySQL에서 GROUP BY 결과의 백분율 값을 확인하십시오.

이상적인 출력이 유사 할 것입니다 :

Q1 | 주 | 시 | %

예 | 석사 | 보스 | 10

no | 석사 | 보스 | 40

m. | 석사 | 보스 | 50

예 | 석사 | 캠 | 20

no | 석사 | 캠 | 20

m. | 석사 | 캠 | 80

나는 (내가 믿는)로 실행하는 문제는 내 count 문 앞에 GROUP BY 작품, 그래서 모든 응답을 계산하지 수 있다는 것입니다. 모든 질문에, 그래서 아래의 비율을 얻을 내 시도 응답 가지고 있지

SELECT q1, state, city, COUNT(q1) FROM master GROUP BY state, city, q1 

: 나는 WITH 또는 OVER(PARTITION BY...)

SELECT q1, state, city, count(q1)/(count(nullif(q1,0))) as percent FROM master group by state, city, q1 

을 것이다 사용하여 믿고 아래는 내가 실수를 생산하는 무슨의 예입니다 가능한 길일 수는 있지만, 나는 일할 수 없다.

답변

0
GROUP BY state, city, COUNT(q1) 
+0

감사합니다. Jeff. 카운트 (q1)로 그룹화하면, 질문 당 총 응답을 얻는 데 도움이 될 것이라고 생각하지 않습니다. 그런 다음 카운트 (q1)와 비교하여 사용하십시오. count (q1) 대신 count (q1)/total_responses_per_this_location 또는 이와 비슷한 것을 원합니다. 또는 나는 물건을 복잡하게하고 있냐? –

+0

그것은 Trevor가 대답 한 것과는 다른 선택 기준에 따라 두 개의 개별 집계가 될 것입니다. –

1

나는 쿼리가 두 부분으로 표현되어야한다고 생각한다. 하나는 State + City 당 카운트를 얻고 다른 하나는 State + City + Q1 당 카운트를 얻습니다. 이 두 쿼리를 함께 결합하고 결합 된 결과에 대해 계산을 수행합니다. 이보다 더 훌륭한 해결책이있을 수 있지만, 아마도이 라인을 따라 무엇인가가 작동 할 수도 있습니다. 모든 오타에 대한 사과!

 
select t1.q1, t1.state, t1.city, ResponseCount, 100.0 * ResponseCount/CityCount as "%" 
from 
    (select q1, state, city, count(q1) as ResponseCount 
    from master 
    group by state, city, q1) t1 
join 
    (select state, city, count(*) as CityCount 
    from master 
    group by state, city) t2 
on t2.State = t1.State and t2.City = t1.City 

희망 사항.