[SQL] 집계 함수와 SQL GROUP BY CASE 문
SQL집계 함수와 SQL GROUP BY CASE 문
내가 이렇게 보이는 열이 :
CASE
WHEN col1 > col2 THEN SUM(col3*col4)
ELSE 0
END AS some_product
그리고 BY 절 내 그룹에 넣어 싶지만, 열에 집계 함수가 있기 때문에이 문제를 일으킬 것 같다. GROUP 할 수있는 방법은이 경우 some_product으로 열 별칭에 의해 있는가, 아니면 그에 하위 쿼리 및 그룹에 넣고해야합니까?
해결법
-
==============================
1.내 생각 엔 당신이 정말로 GROUP BY의 some_product로하지 않을 것입니다.
내 생각 엔 당신이 정말로 GROUP BY의 some_product로하지 않을 것입니다.
에 대한 대답은 "거기는이 경우 some_product로 열 별명으로 GROUP하는 방법입니다, 아니면 그에 하위 쿼리 및 그룹에 넣고해야합니까?" 입니다 : 당신은 할 수없는 열 별칭 BY GROUP.
열 별칭 할당 된 SELECT 절, BY 절 GROUP 때까지 처리되지 않는다. 인라인 뷰 또는 공통 테이블 표현식 (CTE)는 그룹화에 대한 결과를 사용할 수 있도록하는 데 사용할 수 있습니다.
인라인보기 :
select ... from (select ... , CASE WHEN col1 > col2 THEN SUM(col3*col4) ELSE 0 END AS some_product from ... group by col1, col2 ... ) T group by some_product ...
CTE :
with T as (select ... , CASE WHEN col1 > col2 THEN SUM(col3*col4) ELSE 0 END AS some_product from ... group by col1, col2 ... ) select ... from T group by some_product ...
-
==============================
2.섀넌의 대답은 기술적으로 정확하지만, 그것은 잔인한 사람처럼 보인다.
섀넌의 대답은 기술적으로 정확하지만, 그것은 잔인한 사람처럼 보인다.
간단한 솔루션은 case 문으로 당신의 합계 외부를 넣을 필요가있다. 이 트릭을 수행해야합니다
sum(CASE WHEN col1 > col2 THEN col3*col4 ELSE 0 END) AS some_product
기본적으로, 기존 코드 (그룹화 할 수없는 자신의 대답은 각 행을 떠나는) 개별적으로 각 행의 합 (X * Y)을 실행하는 SQL을 알려줍니다.
내가 작성한 코드 라인은 당신이 원하는 어떤 합 제품을합니다.
-
==============================
3.당신은 몇 가지 다른 값으로 그룹화하는 경우, 대신 당신은 무엇을,
당신은 몇 가지 다른 값으로 그룹화하는 경우, 대신 당신은 무엇을,
로 쓰기
Sum(CASE WHEN col1 > col2 THEN SUM(col3*col4) ELSE 0 END) as SumSomeProduct
, OTOH, 당신은 내부 표현으로 그룹화 할 경우 (COL3 * col4)를
/ O를 SUM w 표현과 일치하는함으로써 그룹을 쓰기 ...
Select Sum(Case When col1 > col2 Then col3*col4 Else 0 End) as SumSomeProduct From ... Group By Case When col1 > col2 Then col3*col4 Else 0 End
마지막으로, 당신은 실제 집계하여 그룹화 할 경우
Select SumSomeProduct, Count(*), <other aggregate functions> From (Select <other columns you are grouping By>, Sum(Case When col1 > col2 Then col3*col4 Else 0 End) as SumSomeProduct From Table Group By <Other Columns> ) As Z Group by SumSomeProduct
from https://stackoverflow.com/questions/1208854/sql-group-by-case-statement-with-aggregate-function by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 유효성 검사 SQL 스크립트 코드 (0) | 2020.05.01 |
---|---|
[SQL] 어떻게 MySQL의에 고유 ID를 생성하는? (0) | 2020.05.01 |
[SQL] 하나 개의 출력을위한 두 개의 테이블을 결합 (0) | 2020.05.01 |
[SQL] SSIS 패키지는 임시 테이블의 메타 데이터를 가져 싶지 않다 (0) | 2020.05.01 |
[SQL] PIP "심각한 오류 C1083을 mysqlclient 반환을 설치하지 : 파일을 열 수 없습니다 : '에서 mysql.h를': 그런 파일이나 디렉토리 (0) | 2020.05.01 |