내일배움캠프/TIL

[TIL]SQL코드카타, SQL과제Lv.2,3

dydatablog 2024. 11. 26. 20:29
728x90

1. 이름이 있는 동물 아이디

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME !=''
ORDER BY 1

 

2. 역순 정렬하기

SELECT NAME,
       DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC

 

3. 중복 제거하기

SELECT COUNT(DISTINCT NAME) NAME
FROM ANIMAL_INS

 

4. 동물의 아이디와 이름

SELECT ANIMAL_ID,
       NAME
FROM ANIMAL_INS
ORDER BY 1

 

5. 동물 수 구하기

SELECT COUNT(ANIMAL_ID) 'COUNT'
FROM ANIMAL_INS

 


Lv2. 날짜별 획득포인트 조회하기

  • 상황: 이번에는 이용자들이 잘 활동하고 있는지 보고자 합니다. 포인트가 많을수록 활동을 잘하고 있다고 생각 할 수 있습니다. 날짜별로 획득한 포인트가 점점 늘어나는지 줄어드는지 확인해 봅시다.
  • 문제: 다음과 같은 결과테이블을 만들어봅시다.
    • created_at: 익명화된 유저들의 아이디(varchar255)
    • average_points: 유저가 획득한 날짜별 평균 포인트(int), 반올림 필수

Problem: 반올림 방법

Solution: -

Knowledge: ROUND 함수

    ROUND(숫자 or 열 이름, *반올림할 자리 값)

    (*반올림할 자리 값: 0이 소수점 첫째자리, 1이 소수점 둘째자리, -1은 1의자리)

 

[작성한 코드]

SELECT DATE(created_at) 'created_at',
	   ROUND(AVG(point)) 'average_points'
FROM point_users
GROUP BY 1

 

 

Lv3. 이용자의 포인트 조회하기

  • 상황: 이번에는 이용자들 별로 획득한 포인트를 학생들에게 이메일로 보내려고 합니다. 이를 위한 자료를 가공해봅시다. 특히 users 테이블에는 있으나 point_users 에는 없는 유저가 있어요. 이 유저들의 경우 point를 0으로 처리합시다.
  • 문제: 다음과 같은 결과 테이블을 만들어봅시다.
    • user_id: 익명화된 유저들의 아이디
    • email: 유저들의 이메일
    • point: 유저가 획득한 포인트
      • users 테이블에는 있지만 point_users에는 없는 user는 포인트가 없으므로 0 으로 처리
      • 포인트 기준으로 내림차순 정렬

Problem: 

#오류 : Column 'user_id' in field list is ambiguous
SELECT 
	user_id ,
	email,
	COALESCE(point,0) 'point'
FROM users u LEFT JOIN point_users p on u.user_id = p.user_id 
ORDER BY point DESC

 

 

Solution: 

SELECT 
	u.user_id ,
	u.email,
	COALESCE(p.point,0) 'point'
FROM users u LEFT JOIN point_users p on u.user_id = p.user_id 
ORDER BY p.point DESC

Knowledge: JOIN으로 합친 데이터에서 불러와야 하기 때문에 SELECT 뒤에 불러오는 열이름 앞에는 지정해준 글자를 꼭 붙일 것!

728x90