내배캠 15회차

포도당·2025년 5월 14일
0

달려보자

21.

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

정답 뜯어보기

  1. 이름 레이팅
  2. RANK()로 순위 매겨주기, OVER( 명시적 조건 달아주기)
  3. ORDER BY rating DESC) >> 레이팅을 내림차순으로 정렬하고 숫자가 클수록 높은값(1등) 주기
    ORDERE BY rating ASC >> 레이팅을 오름차순으로 정렬하고 숫자가 작을 수록 높은값(1등) 주기 select name,
    region,
    RANK() over (ORDER BY DESC) as LOL_RANK

    새로 알게된 사실

    1. SELECT 는 조건 계싼

    2. WHERE 절은 조건 필터링

22.

lol_users 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요!
1.
select name,
RANK() over (ORDER BY join_date DESC)
from lol_users

  1. select name,

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 절에 넣어서 지들끼리 비교하게 하라고했다.

23.

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 이렇게 지역으로 한번 내림차순 > 그다음 레이팅으로 내림차순

24.

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 *,
    RANK() OVER (ORDER BY rating DESC) AS RATING_SCORE
    from lol_users
    정답 !!!!!!!!
  2. SELECT name
    FROM lol_users
    ORDER BY join_date DESC
    LIMIT 1;
    정답!!!!!!!
  3. SELECT region,
    rating
    FROM lol_users
    GROUP BY region
    ORDER BY rating DESC

개선점 :
1. select 모두다 불러도됨 딱히 제한 없음
2. GROUP BY 절 삭제 하고
3. ORDER BY region, rating

  1. SELECT REGION,
    AVG (rating)
    FROM lol_users

개선점 :
1. 별명붙이기 AS avg_rating
2. GROUP BY region - 지역별로 니까 SELECT 다음 REGION은 지역 값을 불러오는 것 뿐.

새로알게된 사실

  1. GROUP BY는 집계함수임으로 평균값과 같을때에 하나의 값을 산출 하는데 필요하므로 꼭 써줘야한다
    2, 1등을 뽑는 경우에는 GROUP BY로 묶을 수 가 없기에(하나의 평균값이 아니고 서로 대조하기때문에) 다른 함수를 써야한다.
profile
어디까지 성장할 것 인가..!

0개의 댓글