between 조인

dorongpark·2024년 7월 2일
0

해커랭크(sql)

목록 보기
12/23

테이블 설명:

테이블 1: student 테이블
테이블 2: grade 테이블

name, grade, marks 를 추출 하되
grade가 8이상인 학생의 name만 표시가 되어야 하며, 8미만일 때 null 값이 나와야함
정렬은 grade 순이며, 성적이 8이상인 학생은 알파벳 기준 오름차순,
성적이 8미만인 학생들은 marks 값 기준 오름차순으로 정렬하기


첫번째 오답

  • 사잇값 조인
  • 8 이상일때만 이름 반영하도록 case when절 추가ㅣ

With main as (
SELECT s.Name as name , g.Grade as grade , s.Marks as marks
FROM Students s
JOIN Grades g on s.Marks Between g.Min_Mark and g.Max_Mark
)
SELECT case when grade >=8 then name else null end,
grade,
marks
FROM main


정답

  • 놓친 부분
    - order by 순서 정렬을 빼먹음
    ㄴ grade 내림차순/ name 오름차순
    ㄴ 성적이 8이상인 학생들은 성적 내림차순, 이름 오름차순
    ㄴ 성적이 8미만인 학생들은 이름이 노출되지 않아, 성적순으로만 내림차순
    - 사잇 값 조인을 어떻게 하는지 몰랐음
    ㄴ on s.Marks Between g.Min_Mark and g.Max_Mark

WITH main AS (
SELECT
s.Name AS name,
g.Grade AS grade,
s.Marks AS marks
FROM Students s
JOIN Grades g ON s.Marks BETWEEN g.Min_Mark AND g.Max_Mark
) --- 원하는 테이블 만들기 위한 btw 조인
SELECT
CASE
WHEN grade >= 8 THEN name
ELSE NULL
END AS name, --- 성적이 8이상인 학생의 이름만 불러오기 위한 case when 조건절
grade,
marks
FROM main
ORDER BY --- 정렬
grade DESC, ----- 정렬 1: 성적순으로 내림 차순
CASE
WHEN grade >= 8 THEN name
ELSE NULL
END ASC, --- 정렬 2: 이름 알파벳 순으로 오름차순
CASE
WHEN grade < 8 THEN marks
ELSE NULL
END ASC --- 정렬 3: marks 기준 오름차순

profile
야 너도 분석 할수 있어

0개의 댓글