테스트 사이트 - 개발 중인 베타 버전입니다

mysql 테이블 그룹 조인 좀 질문 드립니다. 채택완료

rem 3년 전 조회 1,662

1. nameTable 이라는 테이블에는 

 

name    / membernum  /   jusocode   

 

김개똥        12                       1234                 

김개똥        12                       1234       

홍길동        13                       1232       

마동석        14                       1231    

 

2번 MeberGroup 이란 필드에는 

 

groupnum / jusocode / 

 

1          1231

2          1234

3         1232

 

 

이런식으로 존재 하는데 두개의 테이블을 조인해서 1번 테이블의 이름으로 그룹으로 묶으면서 

 

정렬은 2번 테이블의 그룹 넘버 순대로 정렬을 하려고 하는데 

 

 

SELECT u.*  FROM nameTable u    JOIN MeberGroup cat ON u.jusocode = cat.jusocode ORDER BY cat.groupnum

 

 

 

이렇게 하면 조인이 잘되고 그룹으로 안묶었으니 잘 나옵니다. 

그런데 그룹으로 묶을려고 

 

SELECT u.*  FROM nameTable u    JOIN MeberGroup cat ON u.jusocode = cat.jusocode GROUP u.name ORDER BY cat.groupnum

 

이렇게 하면 1064 에러가 나네요 

 

뭐가 잘못된 걸까요 ? 

 

먼저 읽어 주셔서 감사에 인사 드립니다.

 

 

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트

에러 메시지는 다 적어 주시기 바랍니다.

 

GROUP u.name

==>

GROUP BY  u.name

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

r
rem
3년 전
빠른 답변 정말 감사드립니다.

GROUP BY u.name 바이를 넣어도 안되긴 했습니다. 제가 여기 적으면서 바이를 빼먹은거 같네요
그리고 실행하면 아래와 같은 에러가 뜹니다.

#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'realestate.u.num_no' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

num_no 필드는 그누보드 wr_id 처럼 자동으로 증가 하는 넘버 필드 입니다.

댓글을 작성하려면 로그인이 필요합니다.

3년 전

에러를 보면 u.name 으로 그루핑이 되었지만 num_no 가 숫자이므로 sum, max, min 같은 집계함수를 쓰지 않으면 안된다는 뜻입니다.

근데 그거만 해결하면 다른 필드도 똑같은 문제가 있겠네요

 

u.* 으로 하지말고 u.name, max(u.num_no) num_no 로 일단 하면서 필요한 컬럼을 추가하세요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 6개

r
rem
3년 전
댓글 너무나 감사드립니다 .
u.name, max(u.num_no) num_no 이런식으로 컬럼을 하나 하나 추가 해서 해도 되는데 그렇게 하면 그룹바이는 되는데 또 오더 바이가 안되면서 아래와 같은 에러가 뜹니다.

#1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'realestate.cat.groupnum' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

그러니깐 지금 현상은 그룹바이가 되면
오더 바이가 안되고
오더바이가 되면
그룹바이가 안되는 현상이 벌어 집니다.
백수1995
3년 전
그룹핑을 먼저하고 결과나온거 보고 그걸 한번 더 감싸서 정렬 하시면 됩니다.

그게 아니라면 정렬을 먼저하시고 그룹핑을 하시거나 하셔야 겠네요
r
rem
3년 전
그룹핑 나온걸 보고 한번더 감싸서 정렬 하면 되신다고 하셨는데 대략적인 힌트를 좀 알 수 있을까요 ?
mysql에 초보라서요 ^^;
엑스엠엘
3년 전
sql_mode=only_full_group_by
를 없애고 한번 해 보세요.
sql_query( "set sql_mode='' ");
// 조인 query 실행

SELECT u.*, min(cat.groupnum) numby FROM nameTable u JOIN MeberGroup cat ON u.jusocode = cat.jusocode
GROUP by u.name ORDER BY numby ASC

이렇게 해야 말이 되는 거 같습니다.
r
rem
3년 전
모든 분들 답변 감사합니다 .
엑스엠엘님이 올려 주신느것도 동작은 하지 않지만 좀더 찾아 보고 공부 해 보도록 하겠습니다 .^^;
엑스엠엘
3년 전
SELECT u.*, min(cat.groupnum) numby FROM nameTable u JOIN MeberGroup cat ON u.jusocode = cat.jusocode
GROUP by u.name ORDER BY numby ASC
이게 안 되면

select * from ( SELECT u.*, min(cat.groupnum) numby FROM nameTable u JOIN MeberGroup cat ON u.jusocode = cat.jusocode
GROUP by u.name ) AA ORDER BY numby ASC
이렇게 해 보세요.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인