서브쿼리 별칭 사용 안되는 이유 0 1 687

by 구루구루 [SQL Query] 서브쿼리 별칭 [2020.11.25 01:57:36]


안녕하세요
select student_name
 from(select s.student_id, s.student_name, s.dept_name, sum(credit) as sum_cre
       from student s, course c, takes t where s.student_id = t.student_id and c.course_id = t.course_id group by          s.student_name) hi
where sum_cre > (select avg(sum_cre)
from (select s.student_id, s.student_name, s.dept_name, sum(credit) as sum_cre
from student s, course c, takes t where s.student_id = t.student_id and c.course_id = t.course_id group by s.student_name) hello) ;

이렇게 하면 되는데

select student_name from(select s.student_id, s.student_name, s.dept_name, sum(credit) as sum_cre from student s, course c, takes t where s.student_id = t.student_id and c.course_id = t.course_id group by s.student_name) hi where sum_cre > (select avg(sum_cre) from hi ) ;

이렇게 하면 hi테이블이 없다고 나옵니다.

 

by 마농 [2020.11.25 08:10:03]

1. 서브쿼리를 테이블 처럼 다시 사용하려면?
- WITH 구문을 사용하면 됩니다.
- 다만 꼭 동일 서브쿼리를 두번 사용해야 하는가? 생각해볼 필요가 있습니다.
2. 그룹바이 구문도 표준에 어긋나는 구문이네요. MySQL 에서만 에러 안나는 구문.
- SELECT 에서 다른 항목들을 지우던가
- GROUP BY 에서 다른 항목들을 추가하던가 해야 맞습니다.
3. credit 이 어느 테이블의 항목인지 표시가 안되어 있네요.
- 어느 테이블의 항목인지에 따라서 조인 테이블이 필요 없을 수도 있습니다.
 

WITH hi AS
(
SELECT s.student_id
     , s.student_name
     , s.dept_name
     , SUM(credit) AS sum_cre
  FROM student s
     , course c
     , takes t
 WHERE s.student_id = t.student_id
   AND c.course_id = t.course_id
 GROUP BY s.student_id, s.student_name, s.dept_name
)
SELECT student_name
  FROM hi
 WHERE sum_cre > (SELECT AVG(sum_cre) FROM hi)
;

SELECT *
  FROM (SELECT s.student_id
             , s.student_name
             , s.dept_name
             , SUM(credit) AS sum_cre
             , AVG(SUM(credit)) OVER() AS avg_sum_cre
          FROM student s
             , course c
             , takes t
         WHERE s.student_id = t.student_id
           AND c.course_id = t.course_id
         GROUP BY s.student_id, s.student_name, s.dept_name
        ) hi
 WHERE sum_cre > avg_sum_cre
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입