작성
·
243
2
궁금해서
FROM절 서브쿼리에 있는
COUNT(*) OVER ()과
그냥 COUNT(*)를 적용해봤습니다.
후자는 오류가 뜨더군요!
1. 이유를 알고 싶습니다. 윈도우 함수의 갯수를 셀 때, 꼭 윈도우 함수를 적용해야 하나요?
-----추가질문 ------
SELECT CASE
WHEN MOD(MAX(RN),2)=1
THEN 'ASD' ELSE NULL END
FROM (SELECT LAT_N
, ROW_NUMBER() OVER (ORDER BY LAT_N) RN
FROM STATION) T2
2. ASD는 그냥 넣은거구요, 저런 식으로 SELECT 절에서
Max(RN)으로 바로 사용해 행의 갯수를 세어 쿼리를 꾸려나가는 것은 안되나요??
3. CASE WHEN 절에서 THEN 다음에 SELECT 절을 넣어 값을 받게 쿼리를 짰는데, 이런 구문은 왜 안되는 건가요?
답변 1
1
1. COUNT(*) 만 조회할 때는 문제가 되지 않지만, COUNT(*)와 다른 컬럼 값을 함께 조회하는 것은 GROUP BY 절 또는 윈도우 함수가 있어야 가능합니다.
2. MAX(RN) = 전체 행의 개수이므로 이걸 활용할 수도 있을 것 같네요! 'ASD' 대신에 문제에서 요구하는 LAT_N 값을 받을 수 있도록 쿼리를 발전시켜 보시면 될 것 같아요.
3. SELECT 절(서브쿼리)를 통해 출력되는 row의 수가 단 1개라면 문제되지 않습니다. 해당 값 1개를 받아와야 하기 때문에, 2개 이상의 row일 경우에는 에러가 납니다.