TIL

231221목_TIL

30303 2023. 12. 21. 20:10
728x90

SQL 문제 22.

 

 

USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.

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

해당 글자가 포함되는 경우, like를 사용. joined = 해서 1차 실패

여러 조건이면 and 로 연결. between 부분에도 and가 있어서 이거 남발해도 되나 서브쿼리를 써야 하나 했는데 남발해도 됨


문제 23.

 

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

SELECT animal_id, name, 
case when sex_upon_intake ='Neutered' then 'O'
else 'X' end
from animal_ins
order by animal_id

처음에 group by 머시긴가 하고 헤매다가 case when 을 사용하는 것이었음

SELECT animal_id, name, 
case when sex_upon_intake like '%Neutered%' then 'O'
when sex_upon_intake like '%Spayed%' then 'X' end
from animal_ins
order by animal_id

 

case when 이라고 무작정 =을 사용하는 것이 아니라

like도 응용할 수 있었다.

~가 들어가는 .. 

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

 

각각 중성화 or not 인 줄 알았는데 저 두단어 중 하나라도 포함된 것이 중성화. 그 나머지가 안 중성화.

문제와 예시를 꼼꼼히..


문제24.

 

PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.

SELECT product_code.left(2)
from product
order by 1

substr 이나 left 쓰면 되겠는데. 함수 표기법을 까먹어서 일단 시도. 

select count(1)
from product
group by category_code
(SELECT left(product_code,2) category_code
from product)

left(컬럼명, 추출할 글자수) 였음. 앞자리 코드 두개 추출 -> 해당 코드별로 그룹 지어서 갯수 세기 

단계가 두개 . 서브쿼린가? 뭐만 하면. 땡. 

select left(product_code,2), count(1)
from product
group by left(product_code,2)
order by left(product_code,2)

무작정 치지 말고 대가리를 굴려보자 . 


sqld 강의

데이터 모델링

엔티티 - 대상, 개체

속성- 엔티티의 특징

관계- 엔티티 간의 관계

 

ERD entity relationship diagram - 엔티티의 관계를 나타내는 도표