
lol_users 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)
select Id, name, rating
from lol_users
group by region
order by(asc) rating
작성 이유 :
그룹바이 지역, 오더바이 레이팅
틀림 이유 :
1. select 절에 region이 없음
2. group by 절이 필요 없음 > 전체 지역 기준으로 그러니까 지역별로 순위를 나타내는게 아니므로
3. order by 문법 오류 및 필요없음 >>> order by rating asc (아니면 기본이 오름차순이니까 생략가능)
정답 :
select name,
rating,
RANK() over (ORDER BY rating DESC) AS lol_rank
from lol_users
정답 뜯어보기
lol_users 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요!
1.
select name,
RANK() over (ORDER BY join_date DESC)
from lol_users
from lolo_users
group by MAX(join_date)
where having(name)
정답 :
SELECT name
FROM lol_users
ORDER BY join_date DESC
LIMIT 1;
또는 중복가입자 모두 불러오려면
SELECT name
FROM lol_users
WHERE JOIN_DATE = (SELECT MAX(join_date) FROM lol_useres)
이해가 안되는 점
왜 MAX구문을 SELECT 바로 옆에 쓰면 안되는지
왜 WHERE 절에다가 써야하는지
CHAT GPT에서는 SELECT 옆에 바로쓰면 최신 가입일 만나오고 서로 비교하지않기때문에 최신가입자 한명을 추출할 수 없다고 했다.
그렇기 떄문에 where 절에 넣어서 지들끼리 비교하게 하라고했다.
lol_users 테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!
select *
from lol_users
order by rating DESC
정답 :
select *
from lol_users
order by region,
rating DESC
해석 : 지역별로 레이팅이 높은 순으로 유저 나열 임으로 region, rating
select 구문처럼 여러개를 작성해서 계산조건으로 달 수 있는거 처음 알았다.
추가:
그러니까 지역별로 레이팅이 높은순 이라는 말은 지역별로 하나씩 최고를 뽑으라는게 X
지역안에서 높고낮음을나타내라는 의미 그러니까
ORDER BY REGION, RATING 이렇게 지역으로 한번 내림차순 > 그다음 레이팅으로 내림차순
lol_users 테이블에서 지역별로 평균 레이팅을 계싼하느 쿼리를 작성 해주세요
select *
avg(rating)
from lol_users
group by region
정답 : SELECT region
AVG(rating) as avg_rating
from lol_users
GROUP BY region
차이점
1. 대문자를 이용해 구절을 작성한다.
2. AVG 값 후 별명을 붙여주는 습관을 들이도록 하자
잘한점
GROUP BY 절을 사용한것, AVG계산을 사용한것 잘 했다.
총정리
개선점 :
1. select 모두다 불러도됨 딱히 제한 없음
2. GROUP BY 절 삭제 하고
3. ORDER BY region, rating
개선점 :
1. 별명붙이기 AS avg_rating
2. GROUP BY region - 지역별로 니까 SELECT 다음 REGION은 지역 값을 불러오는 것 뿐.