데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
선수의 이름, 선수의 키, 선수가 속한 소속팀별 평균키를 알아내는 쿼리문을 만드려 합니다.
SQLD 책 364에서는 아래와 같은 쿼리를 작성하였습니다.
SELECT PLAYER_NAME, HEIGHT, ROUND (
(SELECT AVG(HEIGHT)
FROM PLAYER X
WHERE X.TEAM_ID = P.TEAM_ID), 3)
FROM PLAYER P;
이중 스칼라쿼리에서 WHERE 절이 잘 이해가 되지 않네요,
GROUP BY 쓰면 단일행쿼리이기때문에 에러가 뜨고...
저기서 왜 연결해야하는지 ㅠㅠ설명부탁드려요.
Comment 1
-
쓸만한게없네(윤선식)
2015.04.09 22:28
해당 쿼리는 Inline Sub Query와 Self Join을 사용한 것인데요.
한 컬럼씩 한 줄에 작성하면 다음과 같습니다.
SELECT
PLAYER_NAME,
HEIGHT,
ROUND ( (SELECT AVG(HEIGHT) FROM PLAYER X WHERE X.TEAM_ID = P.TEAM_ID), 3)
FROM PLAYER P;
즉 ROUND ( (SELECT AVG(HEIGHT) FROM PLAYER X WHERE X.TEAM_ID = P.TEAM_ID), 3) 가 하나의 컬럼인 것이죠.
이 때 한 줄씩 ROUND 값을 가져올 때 PLAYER Table 과 다시 Join 을 하는 것입니다.
ALIAS 가 없다면 join 조건에 어떤 것을 넣어야 할 지 불명확하겠지요?
만약 다른 테이블에서 값을 가져온다면 다음과 같이 될 것입니다.
SELECT
PLAYER_NAME,
HEIGHT,
ROUND ( (SELECT AVG(HEIGHT) FROM PLAYER X WHERE X.TEAM_ID = P.TEAM_ID), 3)
FROM OTHERPLAYER P;
아래 내용 보시고 좀 더 공부해 보시면 될 듯 합니다만..
http://www.techonthenet.com/sql_server/subqueries.php