DS가 되기 위한 여정 👩‍💻

Data Science/SQL

[Elice sql] 쿼리 순서 주의할 것 select는 실행이 마지막임!

Tashapark 2025. 2. 24. 10:55
728x90

- elice 코딩에서 sql 강의를 듣기 시작했는데,

BMI..? 이거 지금 select 실습인데.. 안 풀린다고..???

이게 무슨 일이야...

 

++ elice 코딩은 실습기가 mariaDB임. 

- 맨날 mysql만 했는데 아직까지 차이는 모르겠으나.. 무료로 접할 수 있는 기회가 되어서 그냥 엘리스에서 듣는 중 

 

하다가... 그래 순서.. 

근데 그럼 서브쿼리 말고 방법이 없는 건가?

 

수정 전

select *, 10000*(weight / (height * height)) as BMI
from student
where BMI >= 25 OR BMI <= 18.5; -- 이렇게 해봤자 alias가 안먹힘

 

수정 후 

 

- 사실은 방법이 3개가 있음. 왜.. where절에 냅다 할 생각을 못한 건지 ㅋㅋㅋ..ㅎ

1. having 으로 바로 사용 

2. 서브쿼리 사용

3. where절에서 그냥 계산 

 

 

1. having 으로 바로 사용

- having은 그룹바이랑만 사용하는 줄 알았는데 select절 별칭도 사용가능.

- 단, 별칭 참조가 가능하긴 하지만 좋은 방법은 아닌듯 

SELECT *, 10000 * (weight / (height * height)) AS BMI
FROM student
HAVING BMI >= 25 OR BMI <= 18.5;

 

 

2. 서브쿼리 사용

- 이것도 인라인뷰가 아니라 셀렉트에서 해야 하는 줄 알았으는데,

from 절에서 해야 했음..

select * from  
(select *, 10000*(weight / (height * height)) as BMI
from student
) as sub
where BMI >= 25 OR BMI <= 18.5;

 

3. where절에서 그냥 계산 

- 이 생각을 전혀 못했다는게.. ㅎ

SELECT *, 10000 * (weight / (height * height)) AS BMI
FROM student
WHERE 10000 * (weight / (height * height)) >= 25 
   OR 10000 * (weight / (height * height)) <= 18.5;

 

 

=> 지피티는 성능만 고려할 땐 having이 간단하다고 추천함. 

서브쿼리는 가독성용이라고, 웨어절에 계산하는 것은 너무 반복이고 ㅇㅇ

728x90
반응형