본문 바로가기
MySql

MySQL-다른 SELECT의 값에 따라 SELECT하는 방법

by 베이스 공부 2020. 9. 15.
반응형

다음과 같은 테이블이 있습니다.

Name    Year   Value
 A      2000     5
 A      2001     3
 A      2002     7
 A      2003     1
 B      2000     6
 B      2001     1
 B      2002     8
 B      2003     2

사용자는 연도 범위를 기준으로 쿼리 할 수 ​​있으며 이름별로 그룹화 된 값의 합계를 반환합니다 (쿼리 된 연도가 2000-2001이라고 가정).

Name   SUM(Value)
 A         8
 B         7

이제 모든 연도에 대한 각 이름 값의 합계와 모든 값의 합계 비율을 출력하는 계산 된 필드를 삽입하고 싶습니다. 기본적으로 다음과 같이 각각 A와 B에 귀속되는 모든 값의 백분율입니다.

Name   SUM(Value)   % Of Total
 A         8            0.484      (16 / 33)
 B         7            0.516      (17 / 33)

사용자가 2000-2001 년만 쿼리했지만 계산에서 모든 연도에 걸쳐 합계를 사용하기를 원합니다. 몇 시간 동안 검색하고 실험 해 왔지만 방법을 알 수 없습니다. 나는 다음과 같이 쿼리 된 연도를 합산하는 방법 만 알고 있습니다.

SELECT `Name`, SUM(`Value`)/(SELECT SUM(`Value`) FROM `table1`) AS "% of Total"
FROM `table1`
WHERE `Year` BETWEEN 2000 AND 2001
GROUP BY `Name`;

도와주세요! 저는 초보자이고 SQL을 깊이 이해하지 못하므로 고급 코드를 명확히하십시오. 당신의 친절에 감사드립니다.

 

해결 방법

 

FROM 절에서 하위 쿼리를 사용하여 총계 (그리고 원하는 백분율에서)를 계산할 수 있습니다.

SELECT Name,
       SUM(Value) AS "SUM(VALUE)",
       SUM(Value) / totals.total AS "% of Total"
FROM   table1,
       (
           SELECT Name,
                  SUM(Value) AS total
           FROM   table1
           GROUP BY Name
       ) AS totals
WHERE  table1.Name = totals.Name
AND    Year BETWEEN 2000 AND 2001
GROUP BY Name;

하위 쿼리에는 연도를 필터링하는 WHERE 절이 없습니다.

 

참조 페이지 https://stackoverflow.com/questions/9970495

 

 

반응형

댓글