2014-10-13 2 views
1

내 테이블 '제품'백분율로 요약 결과를 정렬 하시겠습니까?

id: 
1 
2 
3 
4 

내 다른 테이블 'productSet'

id/specification 
1/1 
1/n 
1/n 
1/n 
1/1 
2/1 
2/n 
2/n 
3/1 
3/n 
3/n 
3/1 
3/n 
3/n 
3/n 
4/1 
4/n 
4/n 
4/1 

product.id = productSet.id

count(productSet WHERE id LIKE '1') = 5 
count(productSet WHERE id LIKE '1' AND specification LIKE 'n') = 3 
percent = (100-((3*100)/5)) = 40% 

count(productSet WHERE id LIKE '2') = 3 
count(productSet WHERE id LIKE '2' AND specification LIKE 'n') = 2 
percent = (100-((2*100)/3)) = 33,33% 

count(productSet WHERE id LIKE '3') = 7 
count(productSet WHERE id LIKE '3' AND specification LIKE 'n') = 5 
percent = (100-((5*100)/7)) = 28,57% 

count(productSet WHERE id LIKE '4') = 4 
count(productSet WHERE id LIKE '4' AND specification LIKE 'n') = 2 
percent = (100-((2*100)/4)) = 50% 

내가 원하는 결과를 DESC

4 (50%) 
1 (40%) 
2 (33,33%) 
3 (28,57) 

이 명령으로 도와주십시오. 어디서부터 시작해야할지 모르겠다.

+0

스택 오버플로에 오신 것을 환영합니다. 질문을 명확하게 설명하고 필요한 결과 샘플을 제공해 주셔서 감사합니다. –

답변

0

이것은 쉬운 집계 쿼리입니다. GROUP BYSUM()COUNT()과 같이 사용하면 정확한 대답을 얻을 수 있으며 매우 효율적입니다. 여기 http://sqlfiddle.com/#!2/95546c/8/0

SELECT id, 
     COUNT(*) AS total_count, 
     SUM(specification <> 'n') AS non_n_count, 
     100.0 * SUM(specification <> 'n')/COUNT(*) AS percent 
    FROM productSet 
GROUP BY id 
ORDER BY 4 DESC 

트릭 specification의 비 NULL 값이 어디 식 specification <> 'n' 테이블의 각 행에 대해 하나는 0 또는 1의 값을 얻을 수 있음을 깨달을 것이다. 이러한 값을 합산하면 기준을 충족하는 행 수가 계산됩니다.

ORDER BY 4 DESC은 결과 집합을 내림차순으로 네 번째 열로 정렬합니다.

+0

고맙습니다, 당신은 신입니다 : D – Zombyii

+0

당신을 진심으로 환영합니다. 나는 네가있는 곳에서 SQL과 같은 복잡한 것을 찾아 내려고 노력해왔다. –

관련 문제