블로그 이미지
Flying Mr.Cheon youGom

Recent Comment»

Recent Post»

Recent Trackback»

« 2024/5 »
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

#__table__
col1 col2
1	9
1	9
1	9
2	8
... ...

#1
select 
	col1, 
	col2
From 
	__table__
group by 1

#2
select 
	col1, 
	col2
From 
	__table__
group by col2

 

__table__ 에 대해 group by를 했을 때,

group by 1이 어느것을 지칭하는지 헷갈린다. 

그래서 확인해보았다.

 

결론은 동일위치선상에 있는 쿼리문의 select의 대상자를 지칭하는 것이다.

만약 select a, b, c가 있다면, group by 1은 a를 지칭하는 것이다.

이 내용을 정확히 알고 있다면, 상관없지만, 어떤 쿼리는 대상 컬럼이름을 적어주는데 적어놓지 않고 번호로 지칭하는 경우가 종종 있기 때문에 알아두면 유용하다.

 

 

아래 처럼 id가 첫번째 컬럼이고, group by 1 로 첫번째이기 때문에 이런 경우에 특히 헷갈린다.

아래와 같이 결과가 나오는 것을 보면 1번째인 id값을 토대로 agg된다.

WITH ex ( id, val) as (
    VALUES
    (1, 9),
    (1, 9),
    (1, 9),
    (2, 8),
    (3, 8),
    (4, 8),
    (5, 8)
) 

select id, count(1) as cnt from ex
group by id
-- group by 1  <<-- id 또는 1을 입력하는 결과는 같다.

-------------

id	cnt
3	1
1	3 <<<-----
2	1
4	1
5	1

 

다른 예제로 두번째 컬럼인 val을 기준으로 하면 아래와 같이 출력된다.

이 내용으로 컬럼의 순서가 아닌 select에 명시된 순서 기준으로 group by 1이 동작하는 것을 알 수 있다.

WITH ex ( id, val) as (
    VALUES
    (1, 9),
    (1, 9),
    (1, 9),
    (2, 8),
    (3, 8),
    (4, 8),
    (5, 8)
) 

select val, count(1) as cnt from ex
group by val
-- group by 1 <<-- val 또는 1을 입력했을 때 동일한 결과가 나온다.

---------------

val	cnt	
9	3
8	4

 

이 내용을 통해 group by 1, 2, ... 에 대해 헷갈려서 발생하는 오류는 피하면 좋겠다.

 

: