다른 SELECT 값을 기반으로 SELECT하는 방법
다음과 같은 테이블이 있습니다.
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`;
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 절이 없습니다.
다른 값을 기반으로 하는 경우 "subselect"가 필요할 수 있습니다.
http://beginner-sql-tutorial.com/sql-subquery.htm
예를 들어, (위 링크에서)
테이블 "student_details"의 이름과 성이 필요합니다.
하지만 당신은 "과학" 수업을 듣는 학생들에게만 이 정보를 제공하길 원합니다.
SELECT id, first_name FROM student_details WHERE first_name IN (SELECT first_name FROM student_details WHERE subject= 'Science');
솔직히, 이게 네가 원하는 건지 아닌지는 모르겠지만... 도움이 됐으면 좋겠어... 적어도 조금은...
IMHO...
SELECT x.name, x.summary, (x.summary / COUNT(*)) as percents_of_total
FROM tbl t
INNER JOIN
(SELECT name, SUM(value) as summary
FROM tbl
WHERE year BETWEEN 2000 AND 2001
GROUP BY name) x ON x.name = t.name
GROUP BY x.name, x.summary
언급URL : https://stackoverflow.com/questions/9970495/how-to-select-based-on-value-of-another-select
'programing' 카테고리의 다른 글
NULL이 있는 고유 키 (0) | 2022.10.30 |
---|---|
Windows XP의 Java 최대 메모리 (0) | 2022.10.30 |
어떻게 하면 플라스크를 포트 80에서 작동시킬 수 있나요? (0) | 2022.10.30 |
SSL(자기서명) 증명서를 사용하여 스프링 및 휴지기를 통해 MariaDB 연결 (0) | 2022.10.30 |
ALTER 테이블 - MySQL에 자동 증가 추가 (0) | 2022.10.30 |