database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 1637 게시물 읽기
No. 1637
이 쿼리가 왜 안될까요?
작성자
classico
작성일
2008-06-11 15:55ⓒ
2008-06-11 15:57ⓜ
조회수
13,556


SELECT MAX(INTEGER(SCORE)) as GAME_SCORE, MEMBER_ID FROM TABLE
WHERE GAME_TYPE = '2'
GROUP BY MEMBER_ID
ORDER BY INTEGER(SCORE) DESC
FETCH FIRST 20 ROWS ONLY


java.sql.SQLException: [SQL0122] Column SCORE or expression in SELECT list not valid.

데이터의 형식은 아래와 같습니다.

MEMBER_ID : SCORE (스코어가 특이하게 char 타입입니다.)
aaa : 200
bbb : 800
ccc : 150
aaa : 600
bbb : 500
aaa : 400
.
.
.

즉, 아이디 중복되지 않는 상황에서 최고 점수만 뽑을려고 하는데 위의 에러가 발생하고있습니다.
GROUP BY MEMBER_ID, INTEGER(SCORE) 하면 뽑히긴하는데 아이디가 중복됩니다.
쿼리는 정상이라고 생각되는데 DB2를 사용한지 얼마안되서 제가 생각못한게 있는지 궁금하군요.
답변 주시면 감사드리겠습니다.

이 글에 대한 댓글이 총 6건 있습니다.

sql 만으로는 문제가 될것이 없어보이는데..


db2 "select * from t1"

C1  C2

--- ---

aaa 200

bbb 800

ccc 150

aaa 600

bbb 500

aaa 400



db2 "select c1,c2 from (select c1,c2,rownumber() over(partition by c1 order by c2 desc) rn from t1) t1 where rn=1"


C1  C2

--- ---

aaa 600

bbb 800

ccc 150



db2 "select c1,max(int(c2)) c2 from t1 group by c1"

C1  C2        

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

aaa         600

bbb         800

ccc         150

조는 냥이님이 2008-06-11 16:14에 작성한 댓글입니다.
이 댓글은 2008-06-11 16:25에 마지막으로 수정되었습니다. Edit

답변 감사합니다.

그런데 마지막 쿼리에 ORDER BY 절을 삽입하면 점수때문에 아이디가 중복되서 나오더군요.


SELECT C.SCORE, C.MEMBER_ID FROM 

(

SELECT MAX(INT(SCORE)) as SCORE, MEMBER_ID FROM TABLE 

WHERE GAME_TYPE = '2'

GROUP BY MEMBER_ID

)

ORDER BY C.SCORE DESC

FETCH FIRST 20 ROWS ONLY


좀 무식한 방법이지만 이런 식으로 해결했습니다.

classico님이 2008-06-11 16:34에 작성한 댓글입니다. Edit

db2 "select c1,max(int(c2)) c2 from t1 group by c1 order by int(c2)"

C1  C2        
--- -----------
ccc         150
aaa         600
bbb         800

GROUP BY MEMBER_ID 때문에 동일한 MEMBER_ID는 나오지 않을것 같습니다

조는 냥이님이 2008-06-11 16:41에 작성한 댓글입니다. Edit

최초 질문에 올렸던 쿼리를 실행해보면 아래의 에러가 떨어집니다.
다른 DB에서는 문제가 없는 쿼리인데 왜 db2에서 에러가 나는지 이해할 수 없더군요.

[SQL0122] One of the following has occurred:
-- The statement contains column name SCORE and a column function in the SELECT clause and no GROUP BY clause is specified.
-- Column name SCORE is specified in the SELECT clause but not in the GROUP BY clause.
-- An expression is specified in the SELECT clause but not in the GROUP BY clause. 

classico님이 2008-06-11 20:46에 작성한 댓글입니다. Edit


db2look -d dbname -e -t tabname -nofed -o tabname.txt 

이 명령을 실행하시고 올려보세요. 테이블이 어떻게 되어있는지 봐야할거 같네요.
조는 냥이님이 2008-06-12 08:41에 작성한 댓글입니다. Edit

distinct 문을 넣어서 중복을 제거 하면 되겠네요.

김정환(ohho7942)님이 2008-06-12 18:33에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
1640함수 실행 시 질문드립니다. [1]
이도희
2008-06-12
11353
1639connect 질문 드립니다. [1]
이도희
2008-06-12
10282
1638db2mon에 관한 질문입니다. [3]
ㅠㅠ
2008-06-11
10620
1637이 쿼리가 왜 안될까요? [6]
classico
2008-06-11
13556
1636sql select 검색 오류!! [2]
김정환
2008-06-11
12476
1635DB2용 TOAD에서 락걸리는 현상.. [3]
김하늘
2008-06-11
15586
1634원하는 위치에 DB를 만드는방법좀... [4]
김건우
2008-06-11
12073
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다