Dev JS Blog

[Mysql] 데이터 한 로우로 그룹핑 본문

옛날 창고/SQL

[Mysql] 데이터 한 로우로 그룹핑

Dev JS 2020. 12. 25. 09:53
728x90

현재 A,B,C,D 로 4개의 데이터가 들어있는 테이블이 있다.

여기서 A,B,C,D 이렇게 한 로우로 합쳐서 보고싶으면 어떻게 해야할까..?

mysql 에서는 GROUP_CONCAT 이라는 함수를 제공한다.

SELECT GROUP_CONCAT (원하는컬럼) 을 해주면 된다.

 

근데 여기서 ,(콤마)가 아닌걸로 바꾸고 싶다면

separator 를 하고 원하는 구분자를 해주면 된다.

 

근데 여기서 주의 해야할 점이 있다.

만약 데이터가 이럴때 그냥 GROUP_CONCAT을 하게되면 어떻게 될까..?

A/B/C/D 는 구분자로 나오게 되었지만 CLASS는 그냥 제일 처음 로우의 데이터를 보여주게된다.

 

여기서 이제 내가 하려는 말이 뭔지 안다면 SQL에 대한 감이 있는 사람으로 느껴진다.

MYSQL 은 지금까지 써본결과 

개인적으로 그룹핑하는거에 관대한 SQL 이다

다른 대표적은 Oracle 이나 MSSQL 에서는 SELECT 할 컬럼에 대해서

GROUP BY를 할경우 무조건 GROUP BY에 들어가줘야 쿼리문이 성립이 된다.

하지만 MYSQL 은

쿼리를 이렇게 짜더라도

에러하나 없이 쿼리가 잘 나온다.

그래서 MYSQL은 GROUP 쿼리를 짤때 그룹이 잘되었는지 확인을 잘해보는 습관이 필요하다.

저 쿼리문도

SELECT col, class FROM test_table group by col, class 로 해야한다던가

group by 에 안넣게 된다면

SELECT col, SUM(class) FROM test_table group by col

sum, max, count 등등 이런 집계함수를 이용해주어야 그룹의 기준점에 맞춰서

데이터가 조회되는데 MYSQL은 그냥 에러없이 그냥 나오기때문에 

내가 생각한 group by 가 잘 되었는지 확인 해야한다.

 

다시 위에 얘기로 돌아가서 

CLASS 별로 GROUP_CONCAT을 하고 싶다면

class를 group by 를 준다면

class 별로 그룹이 되는 쿼리가 된다.

728x90

'옛날 창고 > SQL' 카테고리의 다른 글

[MySQL] Mysql Merge into  (0) 2020.12.30
[MySQL] Mysql 날짜 포맷  (0) 2020.12.30
[MYSQL] 통계쿼리 with rollup  (1) 2020.05.15
SQLITE 설치하기~  (0) 2020.05.13
[ORACLE] 여러 행 데이터 한 행에  (0) 2019.04.11
Comments