내일배움캠프/TIL

[TIL]숫자 계산이나 문자 가공 시 자주 발생하는 오류, 사전캠프과제7

dydatablog 2024. 11. 14. 18:24
728x90

[문제점] avg, substring 등 함수를 썼더니 에러메세지에 ‘data type’ 단어가 뜨면서 실행되지 않아요

  • 우리가 실습하는 Mysql 과 다르게, 다른 SQL 문법에서는 data type 이 다를 때 연산이 되지 않을 수 있다.
  • 컬럼에 숫자 혹은 문자가 섞여서 저장되어 있는 경우 데이터 타입을 변경해야 한다.
--숫자로 변경
cast(if(rating='Not given', '1', rating) as decimal) 

--문자로 변경
concat(restaurant_name, '-', cast(order_id as char))

 


아래와 같은 lol_feedbacks (LOL 피드백 테이블)이 있습니다.

id user_name satisfaction_score feedback_date
1 르탄이 5 2023-03-01
2 배캠이 4 2023-03-02
3 구구이 3 2023-03-01
4 이션이 5 2023-03-03
5 구구이 4 2023-03-04

lol_feedbacks 테이블에서 만족도 점수(satisfaction_score)에 따라 피드백을 내림차순으로 정렬하는 쿼리를 작성해주세요!

SELECT * 
FROM lol_feedbacks
ORDER BY satisfaction_score DESC;

 

lol_feedbacks 테이블에서 각 유저별로 최신 피드백을 찾는 쿼리를 작성해주세요!

SELECT user_name,
MAX(feedback_date) AS "최신 피드백"
FROM lol_feedbacks
GROUP BY user_name

 

lol_feedbacks 테이블에서 만족도 점수가 5점인 피드백의 수를 계산하는 쿼리를 작성해주세요!

SELECT 
	COUNT(*) AS "5점 피드백"
FROM lol_feedbacks
WHERE satisfaction_score = 5

 

lol_feedbacks 테이블에서 가장 많은 피드백을 남긴 상위 3명의 고객을 찾는 쿼리를 작성해주세요!

SELECT user_name,
    COUNT(*) AS "피드백 수"
FROM lol_feedbacks
GROUP BY user_name
ORDER BY 2 DESC
LIMIT 3; --상위 3명만 추출

 

lol_feedbacks 테이블에서 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리를 작성해주세요!

SELECT feedback_date, AVG(satisfaction_score) AS "평균 만족도"
FROM lol_feedbacks
GROUP BY feedback_date
ORDER BY "평균 만족도" DESC
LIMIT 1;
728x90