>데이터 베이스 >MySQL 튜토리얼 >하위 쿼리를 사용하여 SQL의 여러 테이블에서 데이터를 올바르게 집계하는 방법은 무엇입니까?

하위 쿼리를 사용하여 SQL의 여러 테이블에서 데이터를 올바르게 집계하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-01 13:44:11205검색

How to Correctly Aggregate Data from Multiple Tables in SQL Using Subqueries?

여러 테이블의 데이터를 집계하는 SQL 쿼리

SQL에서는 다양한 기술을 사용하여 여러 테이블의 데이터를 집계할 수 있습니다. 다음은 두 테이블의 데이터를 결합하는 쿼리에 대한 시나리오와 솔루션입니다.

시나리오:

두 테이블 모두 [PROJECT] 열을 포함하는 AP와 INV라는 두 테이블을 생각해 보세요. 및 [값]. 목표는 두 테이블에서 각 프로젝트에 대한 [값]의 합계를 계산하는 결과를 검색하여 다음 형식을 얻는 것입니다.

PROJECT | SUM_AP | SUM_INV
---------+--------+--------
XXXXX   | 500    | 800

잘못된 쿼리:

다음 쿼리를 시도했지만 결과가 부정확했습니다. 합계:

SELECT AP.[PROJECT],
SUM(AP.Value) AS SUM_AP,
SUM(INV.Value) AS SUM_INV
FROM AP INNER JOIN INV ON (AP.[PROJECT] = INV.[PROJECT])
WHERE AP.[PROJECT] = 'XXXXX'
GROUP BY AP.[PROJECT]

잘못된 결과의 이유:

잘못된 쿼리는 합계를 적용하기 전에 값을 그룹화하므로 중복된 프로젝트 값이 합계에 포함됩니다.

맞습니다 해결책:

이 문제를 해결하기 위해 하위 선택과 관련된 쿼리를 사용할 수 있습니다.

SELECT
    AP1.[PROJECT],
    (SELECT SUM(AP2.Value) FROM AP AS AP2 WHERE AP2.PROJECT = AP1.PROJECT) AS SUM_AP,
    (SELECT SUM(INV2.Value) FROM INV AS INV2 WHERE INV2.PROJECT = AP1.PROJECT) AS SUM_INV
FROM AP AS AP1
    INNER JOIN INV AS INV1 ON (AP1.[PROJECT] = INV1.[PROJECT])
WHERE AP1.[PROJECT] = 'XXXXX'
GROUP BY AP1.[PROJECT]

이 쿼리는 하위 선택을 활용하여 각 프로젝트 내의 합계를 별도로 계산합니다. 중복값 문제를 해결하고 올바른 집계 결과를 제공합니다.

위 내용은 하위 쿼리를 사용하여 SQL의 여러 테이블에서 데이터를 올바르게 집계하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.