선수의 이름, 선수의 키, 선수가 속한 소속팀별 평균키를 알아내는 쿼리문을 만드려 합니다.
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