SQL

[1202 TIL] sql 코드카타(like,substr,when)

sjy0074 2024. 12. 2. 20:43

문제 : 조건에 맞는 회원수 구하기

 

SELECT count (*) as users
from user_info
where joined like '2021%' and
      age between 20 and 29

내가 푼 풀이는 이렇지만 처음에 시도했을 땐 like 연산자 쓸 생각을 하지 못하고 

where joined ='2021'

라고 적었고 두 번째 시도에서는 where date(joined)='2021' 이런식으로 잘못된 기입을 했다.

date쓸것없이 앞네글자만  2021이라는 것을 알면 되니까 위처럼 라이크연산자를 작성하면 된다.

 

또 다른 풀이도 두 가지 더 있어 참고하려 가져와봤다.

출처: https://20240228.tistory.com/180 [지적 겸손함:티스토리]

 

SELECT count (*) as users
from user_info
where substr(joined,1,4)=2021 and
      age between 20 and 29

 

 


문제 : 중성화 여부 파악하기

 

보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

첫 시도는

 

-- 코드를 입력하세요
SELECT animal_id,name,
       case when sex_upon_intake='neutered' then 'O'
            when sex_upon_intake='sprayed' then 'X' end "중성화"
from animal_ins

neutered 뒤에 %없는것도 문제가 있고, 애초에 라이크연산자 사용도 아님.. 실행이 안되었다

 

 두번째 시도

-- 코드를 입력하세요
SELECT animal_id,name,
       case when sex_upon_intake like '%neutered%' then 'O' else 'X' end "중성화"
from animal_ins

앞에 퍼센트를 붙일 필요가 없을듯, 그리고 sprayed 가 빠져서 오답인듯하다.

 

SELECT 
ANIMAL_ID, NAME, 
CASE 
  WHEN SEX_UPON_INTAKE LIKE('%Neutered%') OR SEX_UPON_INTAKE LIKE('%Spayed%') THEN 'O'
  ELSE 'X'   
END 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

출처: https://20240228.tistory.com/223 [지적 겸손함:티스토리]

결국 혼자 답을 알아내지 못해 여러 사람들이 올려준 풀이를 보고 오류를 찾아내었다. 

아직 기본적인 구문을 활용하는 과정에서도 어려움이 많아서 매번 풀이 시간이 더욱 길어지고 있다ㅠ