programing

SQL을 사용하여 유사한 선택 항목의 값을 집계하고 합산하는 방법은 무엇입니까?

sourcejob 2022. 9. 25. 00:19
반응형

SQL을 사용하여 유사한 선택 항목의 값을 집계하고 합산하는 방법은 무엇입니까?

유사한 선택 항목을 선택하여 값을 결합하고 집계합니다.이미 가입, 내부 가입, 조합, 조합 모두 시도해 봤지만 기대했던 결과는 없었습니다.선택 내용이 매우 유사한지 확인하십시오.차이점은 다음과 같습니다.SUM(comumn_02)*.05 AS SUM_01와는 다른SUM(comumn_02)*.45 AS SUM_02

그리고.AND COLUMN_05 = ALFA와는 다른AND COLUMN_05 = BETA두 번째 선택에서.

이 모든 것이 여기에 있습니다.

SELECT
    COLUMN_01,
    SUM(COLUMN_02)*.05 AS SUM_01
FROM table
WHERE
    COLUMN_03 = 1
    AND COLUMN_04 = 2
    AND COLUMN_05 = ALFA
GROUP BY COLUMN_01

UNION ALL

SELECT
    COLUMN_01,
    SUM(COLUMN_02)*.45 AS SUM_02
FROM table
WHERE
    COLUMN_03 = 1
    AND COLUMN_04 = 2
    AND COLUMN_05 = BETA
GROUP BY COLUMN_01;

이 예에서는 다음과 같은 결과를 얻을 수 있습니다.

|-----------|--------|
| COLUMN_01 | SUM_01 |
|-----------|--------|
| value_01  |    465 |
| value_02  |    186 |
| value_03  |    245 |
| value_01  |    102 |
| value_02  |    108 |
| value_03  |    325 |
|--------------------|

하지만 내가 원하는 건

|-----------|--------|
| COLUMN_01 | SUM_01 |
|-----------|--------|
| value_01  |    567 | //sum of 465 + 102
| value_02  |    294 | //sum of 186 + 108 
| value_03  |    570 | //sum of 245 + 570
|--------------------|

그리고 가장 중요한 것은 확장성이 있습니까?즉, 3개 이상의 선택된 "유니온"과 함께 사용하는 것입니까?그렇지 않으면 퍼포먼스가 크게 저하될 수 있습니다.

쿼리의 문제는 단일 테이블에서 집계하고 있다는 것입니다.이 경우,UNION ALL당신의 가치관을 얻습니다.문제를 해결하려면 다음 두 가지 작업의 순서를 반전해야 합니다.

  • 먼저, 이 기능을UNION기능.
  • 그 후, 에그리게이트를 실시합니다.SUM집계 함수
WITH CTE AS(
       SELECT COLUMN_01,
              COLUMN_02*.05 AS COLUMN
       FROM table
       WHERE COLUMN_03 = 1
         AND COLUMN_04 = 2
         AND COLUMN_05 = ALFA

       UNION ALL

       SELECT COLUMN_01,
              COLUMN_02*.45 AS COLUMN
       FROM table
       WHERE COLUMN_03 = 1
         AND COLUMN_04 = 2
         AND COLUMN_05 = BETA
) 
SELECT COLUMN_01,
       SUM(COLUMN) AS SUM_01
FROM CTE
GROUP BY COLUMN_01

조건부 집계 사용:

SELECT COLUMN_01,
       SUM(COLUMN_02 * CASE COLUMN_05 WHEN 'ALFA' THEN 0.05 WHEN 'BETA' THEN 0.45 END) AS SUM_01
FROM tablename
WHERE COLUMN_03 = 1 AND COLUMN_04 = 2 AND (COLUMN_05 IN ('ALFA', 'BETA'))
GROUP BY COLUMN_01;

언급URL : https://stackoverflow.com/questions/72687966/how-to-aggregate-and-sum-values-of-similar-selects-using-sql

반응형