group by란..

보통 group by 사용할대는 합계, 평균, 집계 등등 (CUBE, SUM,AVG, 등등 여러 용도가 있지만)

중복데이터 제거할때도 많이 사용된다

DISTINCT 써서 해결이 안될경우이다.



예를들면 사용자 물품구매나, 출석기록 같다고 해야할까?

사용자 테이블 A와 조인할 테이블 B를 가지고

사용자 아이디로 조인을 걸면

ID 

 DATA

 A

 1

 A

 2

 A 3

 B

 B1


이런식으로 나오게 되고

이것을 DATA별로

사용자

 DATA1

DATA2 

DATA3 

DATA4 

A

 1

 2

 3

 1

B

 B1

 B2

 B3

 B4

이렇게 원하고 싶어서 찾다보니 GROUP BY절에 대해서 하게 되었다.




1
2
3
4
5
6
7
8
9
10
11
 
SLEECT * FROM(
SELECT 사용자이름, 사용자아이디
  FROM 사용자테이블
) A1
  LEFT OUTER JOIN
  (SELECT 데이터, 사용자아이디
   FROM 데이터테이블
)B1
ON A1.사용자아이디 = B1.사용자아이디
)
cs

약간 이런식으로 쿼리를 작성하면

A,B에대한 테이블을 조인건다.

그러면 위의 표처럼 데이터가 나올것이고

이 조인건 테이블을 가지고 GRUOP BY를 적어본다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
SLEECT 
 MAX(A1.유저이름), 다른 조인할 컬럼명 명시 
-- ITERATOR나 해당 LEFT OUTER JOIN으로 더 붙이거나 ..날짜면 해당 일수만큼 빼서 붙이거나..
 
 
 FROM(
  SELCT 사용자이름, 사용자 아이디
  FROM 유저테이블
) A1
  LEFT OUTER JOIN
  (SELECT 데이터, 사용자아이디
   FROM 데이터테이블
)B1
ON A1.유저아이디 = B1.유저아이디
)
 
GROUP BY 조인할 컬럼명 명시. -- SELECT 절에서 GROUP BY함수쓴 컬럼은 적지 않는다.
cs



SELECT 절에서 GROUP BY 함수를 적용한 부분은 GROUP BY절에 적지 않는다.


잘 몰라서 여러가지 GROUP BY 에러를 보았다.

그리고 함수 계산할 곳이 없는데 어쩌지 라는 생각을 했는데

아예 가변적으로 사용자 아이디(PK) 값을 MAX 함수로 적으면 그룹으로 묶어지는구나 느꼇다.


더 좋은 방법이 있을지 모르나.. 일단은 이리 해결하였으니.. 나중에 더 공부해서 보면 이불킥을 하겠지 ㅠㅠ




'ORACLE' 카테고리의 다른 글

[Oracle] 만 나이 구하기  (0) 2018.02.28
[ORACLE] 1이하의 소수점 처리  (0) 2017.09.21
[ORACLE] UNION // INTERSECT 연습  (0) 2016.09.23

+ Recent posts