본문 바로가기

개발/BACK

[mysql] WHERE 별칭 사용하기 (having)

728x90

 

 


쿼리를 작성하다 보면, 서브쿼리를 이용해서 다른 테이블에 있는 데이터를 가져다 사용할 때가 있다.

 

서브쿼리를 사용해서 가져온 데이터를 이용해서 조건절에 조건을 추가하고 싶다면?

 

해당 포스팅에서는 별칭을 지정한 데이터를 조건 절에서 사용하는 방법에 대해 작성한다.

 


예제 데이터

 

 
1
2
3
4
5
6
       //오류 쿼리
select A.id,
               A.email, 
               A.nickname,
               (select count(*) from tb_book where id =A.id) AS "total"
        from tb_user A
        where total > 1;
cs

 

회원 아이디를 이용해 tb_book 테이블의 컬럼의 갯수를 회원 정보와 함께 보는 쿼리다.

 

여기서 내가 alias로 지정한 total의 개수가 2개 이상인 컬럼을 조회할 때, total이 조건절로 들어가야 한다.

그래서 where 절에 total > 1 구문을 넣어줬다.

 

하지만, 해당 쿼리를 실행하면 다음과 같은 오류를 볼 수 있다.

 

Error Code: 1054, Unknown column 'total' in 'where clause' 

 

 

해당 오류가 뜨는 것은 당연하다.

 

Alias(별칭)을 인지할 수 있는건 GROUP BY 이후 절부터 별칭을 인지할 수 있기 때문이다.

 

바꿔말하면, 집계함수의 조건을 추가할 때 주로 사용되는 Having절에서는 흐름상으로 GROUP BY 이후 절이니까 별칭을  인식할 수 있다는 말이 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        //서브쿼리를 사용한 예제
        select A.id, 
               A.email, 
               A.nickname,
               (select count(*from tb_book where id =A.id) AS "total"
        from tb_user A
        having total > 1;
 
        //조인을 사용한 예제
        select A.id, 
               A.email, 
               A.nickname,
               count(*) AS "total"
        from tb_user A inner join tb_book B on A.id = B.id
        group by A.id
        having total > 1;
cs

 

728x90