Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 과정평가형
- 함수
- controller
- eGovFramework
- spring
- CSS
- javascript
- 정의
- input
- Ajax
- html
- 태그
- sql
- jsp
- Oracle
- was
- select
- mybatis
- jQuery
- eGov
- json
- POI
- array
- 개념
- web.xml
- JVM
- 오류
- TO_DATE
- Java
- 암호화
Archives
- Today
- Total
web developer
[sql] 각 컬럼의 데이터를 합산한 쿼리 본문
728x90
728x90
해당 테이블의 각 컬럼의 count 값 가져오는 쿼리는 다음과 같습니다.
(1) 서브쿼리를 사용한 카운트 합산
SELECT
(SELECT COUNT(*) FROM validity WHERE mon01_usgqty LIKE '1@%') +
(SELECT COUNT(*) FROM validity WHERE mon02_usgqty LIKE '1@%') AS total_count
FROM dual;
이 쿼리는 다음과 같이 작동합니다:
- validity 테이블에서 mon01_usgqty 컬럼이 '1@%'로 시작하는 값을 카운트합니다.
- validity 테이블에서 mon02_usgqty 컬럼이 '1@%'로 시작하는 값을 카운트합니다.
- 두 개의 서브쿼리 결과를 더하여 total_count라는 별칭으로 반환합니다.
(2) 공통 테이블 표현식(CTE, Common Table Expression)와 UNPIVOT을 사용해 데이터를 변환한 후 특정 패턴의 값을 카운트하는 쿼리
WITH filtered_validity AS (
SELECT *
FROM validity
WHERE <조건>
),
unpivoted_table AS (
SELECT usgqty
FROM filtered_validity
UNPIVOT (usgqty FOR mon IN (
mon01_usgqty, mon02_usgqty, mon03_usgqty, mon04_usgqty, mon05_usgqty,
mon06_usgqty, mon07_usgqty, mon08_usgqty, mon09_usgqty, mon10_usgqty,
mon11_usgqty, mon12_usgqty
))
)
SELECT COUNT(*)
FROM unpivoted_table
WHERE usgqty LIKE '1@%';
이 쿼리는 다음과 같은 단계를 거칩니다:
- filtered_validity CTE: validity 테이블에서 원하는 조건(<조건>)을 만족하는 행을 선택합니다.
- unpivoted_table CTE: filtered_validity 결과에서 UNPIVOT 연산을 사용하여 mon01_usgqty부터 mon12_usgqty까지의 열을 usgqty라는 단일 열로 변환합니다.
- 메인 쿼리: unpivoted_table에서 usgqty가 '1@%'로 시작하는 값을 카운트합니다.
728x90
728x90
'SQL > Oracle SQL' 카테고리의 다른 글
[oracle] 오라클 트리거(trigger) : 기본부터 실용 예제까지 (0) | 2024.07.26 |
---|---|
[sql] LISTAGG 함수 (0) | 2024.07.18 |
[oracle] DBMS_LOB 데이터 타입 및 함수 (0) | 2024.01.11 |
[sql] oracle date(날짜) 요일 구하기 (0) | 2023.09.24 |
[oracle] WITH절 (0) | 2022.11.22 |