안녕하세요 서브쿼리 질문 드립니다
질문 1
SELECT
*
, (SELECT COUNT(*) FROM Table WHERE idx <= X.idx ) c
FROM Table X
원하는 결과 1
-------------------------------------------------------------
idx b c
1 1 1
2 1 2
3 2 3
4 2 4
ROW의 갯수가 많아지면 서브쿼리의 속도가 현저하게 느려집니다. MSSQL에서는 클러스터드 인덱스를 타는것 같은데 MYSQL에서는 안타는것 같은데
다른 방법이 있는지 궁금합니다.
질문 2
SELECT
*
, (SELECT COUNT(*) FROM (SELECT * FROM Table WHERE idx <= X.idx ) c
FROM Table X
위와 같은 쿼리는 MSSQL에서는 실행이 되나 MYSQL에서는 Unknown column X... 이라고 나오네요..
궁극적으로 원하는 결과는 idx <= X.idx 의 결과에서 row를 거듭할수록 row숫자가 늘어나잖아요?
거듭한 row중에 100개의 결과를 가지고 b=1의 갯수를 구하는 것입니다.
만약 idx <= X.idx 에 2개의 row만 가지고 b=1의 결과를 구한다 하면
-------------------------------------------------------------
idx b c
1 1 1 ( idx 1, b = 1 합 1)
2 1 2 (idx1 b = 1 , idx2 b = 1 합 2)
3 2 1 (idx 2 b = 1 idx 3 b = 2 합 2)
4 2 0 (idx 3 b = 2, idx 4 b = 2 합 0)
의 결과가 될것입니다.
질문 1의 경우 원하는 결과는 나오는데 속도가 많이 느린점이며
질문 2의 경우 서브쿼리의 서브쿼리 내에 테이블 얼리어스가 인식이 안되는 문제 같습니다. |