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
반응형
'Data Science > SQL' 카테고리의 다른 글
[elice sql] sql 데이터 삽입/수정/삭제 (0) | 2025.02.25 |
---|---|
[프로그래머스 sql] where ~ like는 문자열 타입 비교, date는 다르게 (0) | 2025.02.24 |
[프로그래머스 sql] 트리구조에서 cte recursive, 리프 노드 (0) | 2025.02.19 |
[프로그래머스 sql] cte recursive (0) | 2025.02.19 |
[프로그래머스 sql] join 시 참조 관계 주의 할 것. (0) | 2025.02.19 |