안녕하세요.
예를들어 아래와 같은 쿼리가 있습니다.
물론 아래 쿼리는 잘 돌아 갑니다.
하지만, 좀더 고급(?) 적으로 사용할수 없을까 궁금 합니다.
속도도 그렇구요..
설명 드리자면, FROM 절의 POINT_TOT 컬럼의 서브쿼리는 MY_COLUMN = @MY_COLUMN 이 조건에 없습니다.
즉, 전체 사람들의 점수를 내는거죠.
아래의 쿼리도 작동은 되는데, 속도 측면에서 더 고급 쿼리는 없을까요?
SELECT
R.ID
,R.NAME
,R.POINT
,R.POINT_TOT, ROUND(R.POINT/R.POINT_TOT*100,1) AS POINT_RES
FROM
(
SELECT
A.ID
,A.NAME
,ROUND(AVG(A.POINT),1) AS POINT
,(
SELECT
ROUND(AVG(AA.POINT),1)
FROM TEST_DB AS AA
WHERE AA.L_COLUMN = @L_COLUMN AND AA.M_COLUMN = @M_COLUMN AND AA.S_COLUMN = @S_COLUMN AND AA.T_COLUMN = @T_COLUMN AND
GROUP BY AA.ID
) AS POINT_TOT
FROM TEST_DB
WHERE
L_COLUMN = @L_COLUMN
AND M_COLUMN = @M_COLUMN
AND S_COLUMN = @S_COLUMN
AND MY_COLUMN = @MY_COLUMN
GROUP BY A.ID, A.NAME
) AS R
ORDER BY R.ID
1.안쪽쿼리가 불완전 합니다.
AND AA.T_COLUMN = @T_COLUMN AND ? <- ?가 있어야 할것 같은데요
GROUP BY AA.ID
2.안쪽쿼리를 GROUP BY ID했다는 예기는 2개 이상의 ROW가 발생할 수 있다는 예기가 되는데요.
즉,단일 행 하위 질의에 2개 이상의 행이 리턴...될것 같습니다.
아마도,안쪽 쿼리에는 GROUP BY가 없을것 같네요.원본에서는.
3.안쪽쿼리와 바깥쪽 퀴리에 조건이 MY_COLUMN = @MY_COLUMN 이부분만 다르다고 하셨는데,
안쪽쿼리에 AA.T_COLUMN = @T_COLUMN 이부분이 바깥쪽 쿼리에는 없습니다.
어쩌면 T_COLUMN 이 MY_COLUMN 일것 같기도 하네요.
4.집계를 위해서 SELECT 절에 SUBQUERY를 하는것도 방법일겁니다.