rubus0304 님의 블로그
[데이터분석 8일차] SQL코드카타 (Lv.4 57번까지) 본문
51. 없어진 기록 찾기
천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.
(혼자 풀어서 정답!!!)
SELECT b.animal_id,
b.name
from animal_outs b left join animal_ins a on b.animal_id = a.animal_id
where a.datetime is null and b.datetime is not null
** a 데이터가 유실됬으니까 기준을 여기로 잡으면 안됨 따라서.b 데이터를 기준으로 left join.
마찬가지로 a 데이터 유실됬으니까 id랑 name 도 b꺼로 !!
52. 과일로 만든 아이스크림 고르기
상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요.
혼자서 정답..!!
SELECT a.flavor
from first_half a inner join icecream_info b on a.flavor = b.flavor
where a.total_order > 3000 and b.ingredient_type like "%fruit%"
order by a.total_order desc
53. 재구매가 일어난 상품과 회원 리스트 구하기
ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.
(오답..내가 한 쿼리)
SELECT user_id, product_id
from online_sale
group by 1
having count(user_id)>1 and count(product_id)>1
order by user_id asc, product_id desc
(정답1 )
SELECT user_id, product_id
from online_sale
group by 1, 2
having count(user_id)>1 and count(product_id)>1
order by user_id asc, product_id desc
(정답2)
SELECT user_id, product_id
from online_sale
group by 1, 2
having count(*) >=2
order by user_id asc, product_id desc
54. 최댓값 구하기
가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.
(오답.. 처음에 일케 배운거 같은데..?)
SELECT max(date(datetime))
from animal_ins
(정답! 그냥 max( 컬럼))
SELECT MAX(DATETIME) AS 시간
FROM ANIMAL_INS;
** MAX ()
- 해당 컬럼의 최댓값을 반환
- 시간의 경우 최댓값은 가장 최근 시간을 반환
55. 조건에 맞는 사용자 정보 조회하기
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.
(오답. 혼자했을 때 '-'하이픈 넣는 법 몰라 검색해봤는데 안됨.뭐냐고 )
SELECT a.writer_id, b.nickname, concat(b.city, b.street_address1, b.street_address2),
substr(b.TLNO, 1, 3)||'-'|| substr(b.TLNO, 4,4) || '-'|| substr(b.tlno, 8)
from used_goods_board a inner join used_goods_user b on a.writer_id = b.user_id
where contents >= 3
order by 1 desc
(두번째 시도.. 오답 왜 자꾸 오답나와ㅠㅠ 다른 블로그 정답과 비교해본 결과 주소에 띄어쓰기 포함되있음 -ㅁ-..아니 문제에서도 그렇고 값에서도 어? 띄어쓰기가 두번째 주소 사이는 다 되어있는데 어떻게 아냐고오오오오 ㅠㅠ어쨋든 아래가 정답)
SELECT b.user_id, b.nickname, concat(b.city, ' ',b.street_address1, ' ', b.street_address2) as "전체주소",
concat(substr(b.TLNO, 1, 3),'-', substr(b.TLNO, 4,4), '-', substr(b.tlno, 8)) as "전화번호"
from used_goods_board a inner join used_goods_user b on a.writer_id = b.user_id
group by 1
having count(a.writer_id) >= 3
order by 1 desc
56 특정 옵션이 포함된 자동차리스트구하기
CAR_RENTAL_COMPANY_CAR 테이블에서 '네비게이션' 옵션이 포함된 자동차 리스트를 출력하는 SQL문을 작성해주세요. 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요
(갑자기 레벨 1 내기 있기?)
SELECT *
from car_rental_company_car
where options like "%네비게이션%"
order by car_id desc
57. 조건에 부합하는 중고거래 상태 조회하기
USED_GOODS_BOARD 테이블에서 2022년 10월 5일에 등록된 중고거래 게시물의 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회하는 SQL문을 작성해주세요. 거래상태가 SALE 이면 판매중, RESERVED이면 예약중, DONE이면 거래완료 분류하여 출력해주시고, 결과는 게시글 ID를 기준으로 내림차순 정렬해주세요.
SELECT board_id, writer_id, title, price,
case when status = 'sale' then '판매중'
when status = 'reserved' then '예약중'
when status = 'done' then '거래완료'
end 'status'
from used_goods_board
where created_date like '%2022-10-05%'
order by 1 desc
** STATUS 는 한번만 쓰면 됨!!!
'Data Analyst > daily' 카테고리의 다른 글
[데이터분석 ] 코드카타 (Python) (Lv.1 ~) (0) | 2024.10.14 |
---|---|
[데이터분석 9일차] 코드카타 (Lv.4) (5) | 2024.10.11 |
[데이터분석 7일차] SQL 코드카타 (Lv.3-Lv.4진입) (5) | 2024.10.09 |
[데이터분석 6일차] SQL코드카타 (Lv.2 30번 끝) (2) | 2024.10.08 |
[데이터 분석 5일차] SQL 코드카타 (Lv.1 -Lv.2 26번 까지) (0) | 2024.10.07 |