GROUP BY 절에 컬럼 별칭이나 포지션 사용
정확히 이야기 하면 GROUP BY, GROUP BY CUBE, GROUP BY ROLLUP, GROUP BY GROUPING SETS 절에
컬럼의 별칭(alias)이나 select 리스트의 포지션 값을 사용할 수 있게 되었습니다.
HAVING 절에는 컬럼의 별칭만 사용이 가능합니다.
group by, having 절에 컬럼의 별칭(alias)을 사용할 수 있게된 점은 가독성면에서 좋아진 방법인 듯합니다.
하지만 select 포지션 값 사용 부분은 오히려 긴 SQL 문장에서는 가독성을 해치는 방식이지 않을까 우려스럽습니다.
선호도가 있긴하겠지만 팀코딩이나 가독성면에서는 포지션값 사용은 추천하고 싶지 않네요
아래는 관련 내용을 테스트하고 이전 버전에서는 어떤지 확인해 보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
SQL> select job_id job
2 , avg(salary) avg_sal
3 , count(*) job_id_count
4 , max(hire_date) recently_member_date
5 from employees
6 group by job
7 having job_id_count > 6;
JOB AVG_SAL JOB_ID_COUNT RECENTLY
------------------------------ ---------- ------------ --------
SA_REP 8350 30 08/04/21
SH_CLERK 3215 20 08/02/03
ST_CLERK 2785 20 08/03/08
경 과: 00:00:00.01
|
위의 select 문장에서는 group by와 having 절에 별칭을 사용해 봤습니다.
이번에는 포지션 값을 사용해 보도록 하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SQL> select job_id job
2 , avg(salary) avg_sal
3 , count(*) job_id_count
4 , max(hire_date) recently_member_date
5 from employees
6 group by 1
7 having job_id_count > 6;
select job_id
*
1행에 오류:
ORA-00979: "JOB_ID": GROUP BY 표현식과 일치하지 않음
경 과: 00:00:00.00
|
에러가 발생합니다. 포지션 값을 사용하려면 그냥 사용해서는 안되네요.
그럼 어떻게 사용하는지 내용을 확인해 보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
SQL> col name for a30
SQL> col value for a10
SQL> col display_value for a10
SQL> col default_value for a10
SQL> col isses_modifiable for a20
SQL> col description for a35
SQL>
SQL> select name
2 ,value
3 ,display_value
4 ,default_value
5 ,isses_modifiable
6 ,description
7 from v$parameter
8 where name = 'group_by_position_enabled';
NAME VALUE DISPLAY_VA DEFAULT_VA ISSES_MODIFIABLE DESCRIPTION
------------------------------ ---------- ---------- ---------- -------------------- -----------------------------------
group_by_position_enabled FALSE FALSE FALSE TRUE enable/disable group by position
경 과: 00:00:00.02
|
group_by_position_enabled 란 파라미터 값을 확인해 봅니다.
FALSE로 설정이 되어 있습니다. 그렇습니다. 이 파라미터의 값이 TRUE로 되어 있어야 쓸 수 있는 방식인 겁니다.
개인적인 생각으로는 기능을 빼고 이런 파라미터도 빼는 게 오히려 더 낫지 않을까 생각이 듭니다.
그럼 파라미터를 변경하고 확인해 보도록 하겠습니다.
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
31
32
33
34
|
SQL> alter session set group_by_position_enabled=true;
세션이 변경되었습니다.
경 과: 00:00:00.00
SQL> select name
2 ,value
3 ,display_value
4 ,default_value
5 ,isses_modifiable
6 ,description
7 from v$parameter
8 where name = 'group_by_position_enabled';
NAME VALUE DISPLAY_VA DEFAULT_VA ISSES_MODIFIABLE DESCRIPTION
------------------------------ ---------- ---------- ---------- -------------------- -----------------------------------
group_by_position_enabled TRUE TRUE FALSE TRUE enable/disable group by position
경 과: 00:00:00.05
SQL> select job_id job
2 , avg(salary) avg_sal
3 , count(*) job_id_count
4 , max(hire_date) recently_member_date
5 from employees
6 group by 1
7 having job_id_count > 6;
JOB AVG_SAL JOB_ID_COUNT RECENTLY
------------------------------ ---------- ------------ --------
SA_REP 8350 30 08/04/21
SH_CLERK 3215 20 08/02/03
ST_CLERK 2785 20 08/03/08
경 과: 00:00:00.01
|
정상적으로 동작하는 것을 확인할 수 있습니다.
별칭 사용은 추천하지만 포지션 값 사용은 비추천입니다.
이번에는 GROUP BY 절 사용에 있어서 개선사항을 확인해 봤습니다.
새로운 기능에 대해서 지속적으로 테스트하고 확인해 보도록 하겠습니다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
» | (23c 신기능) GROUP BY 절에 컬럼 별칭이나 포지션 사용 | 명품관 | 2023.04.26 | 966 |
10 | (23c 신기능) UPDATE 문장을 위한 Default 값 NULL 설정 가능 | 명품관 | 2023.04.26 | 616 |
9 | (23c 신기능) PL/SQL 에서 SQL로 Transpiler 자동변환(Automatic PL/SQL to SQL Transpiler) | 명품관 | 2023.04.25 | 266 |
8 | (23c 신기능) INTERVAL 데이터타입에 집계함수와 분석함수 사용 가능 | 명품관 | 2023.04.20 | 363 |
7 | (23c 신기능) 23c에서 개발자를 위해 새로 추가된 DB_DEVELOPER_ROLE role | 명품관 | 2023.04.19 | 259 |
6 | (23c 신기능) IF EXISTS와 IF NOT EXISTS 사용 | 명품관 | 2023.04.18 | 1470 |
5 | (23c 신기능) Annotation 사용하기(comment와 유사한) | 명품관 | 2023.04.18 | 221 |
4 | (23c 신기능) Direct Joins for UPDATE and DELETE Statements(직접 조인을 사용한 UPDATE, DELETE) | 명품관 | 2023.04.12 | 214 |
3 | JSON-Relational Duality View 튜토리얼 | 명품관 | 2023.04.10 | 173 |
2 | 오라클 프로세스 prefix가 ora_ 에서 db_로 변경 | 명품관 | 2023.04.06 | 208 |
1 | Oracle Database 23c Free Install with Oracle Linux 8.2(리눅스 8.2 버전에서 오라클 23c 설치) [1] | 명품관 | 2023.04.05 | 1604 |