DS가 되기 위한 여정 👩‍💻

Data Science/SQL

[프로그래머스 sql] if 활용하기

Tashapark 2025. 4. 1. 23:37
728x90
반응형

특정 조건을 만족하는 물고기별 수와 최대 길이 구하기

 

- ..? 뭐가 문제인 걸까..?

select count(*) as FISH_COUNT,
        avg(length) as MAX_LENGTH, FISH_TYPE
from FISH_INFO
where length in (select case when length <= 10 then 10 else length end as length 
                 from FISH_INFO )
group by FISH_TYPE
having avg(length) >= 33
order by FISH_TYPE;

 

- 위처럼 하면, 10으로 길이가 다 고정되어서 나올 수 있음. 

그래서 아래처럼 having절에 바로 case when then 넣었음. 

- 또, 문제를 잘못 이해해서 맥스 렝쓰를 구해야 하는데 평균을 출력하는 식으로 썼음. 

SELECT COUNT(*) AS FISH_COUNT,
       MAX(length) AS MAX_LENGTH,
       FISH_TYPE
FROM FISH_INFO
GROUP BY FISH_TYPE
HAVING AVG(CASE WHEN length <= 10 THEN 10 ELSE length END) >= 33
ORDER BY FISH_TYPE;

- but, 60점으로 100점이 안 나옮.. 

 

........ 문제 똑바로 안 읽냐.. null이잖아. 10cm이하는..

SELECT COUNT(*) AS FISH_COUNT, 
       MAX(LENGTH) AS MAX_LENGTH, 
       FISH_TYPE
FROM FISH_INFO
GROUP BY FISH_TYPE
HAVING AVG(IF(IFNULL(LENGTH, 0) <= 10, 10, LENGTH)) >= 33
ORDER BY FISH_TYPE;

 

- sql도 if 절 사용 가능함.  if(조건문, 해당할 때 값, 해당 칼럼)

- 일단 null을 0으로 바꿔서 비교가 되게 할 것. 

- 그리고 10보다 작으면 10 넣어줌. 

728x90
반응형