inflearn logo
강의

Course

Instructor

[A hundred words are not as good as seeing once] Advanced SQL problem solving for data analysis

Problem 3 Explanation

이런 풀이는 왜 안되는지 궁금해요

Resolved

273

holly

10 asked

0

SELECT S.id, 
(CASE WHEN MOD(S.id,2)=0 THEN S2.student 
WHEN S.id=count(S.id) THEN S.student 
ELSE s3.student END) AS student
FROM Seat AS S INNER JOIN Seat AS S2 ON S.id -1 =S2.id 
INNER JOIN Seat AS S3 ON S.id +1 =S3.id;

짝수, 마지막 수, 홀수 기준으로 출력해주려고 하는데, 실제 output에서는 id 2인 친구만 출력이 되네요. 어떤 부분이 틀렸는지 궁금합니다!

 

+강의에서 COUNT(*)에 OVER문을 써야하는 이유도 궁금합니다. 그냥 COUNT(id)만 해도 같은 답이 되는 것 같은데 아닐까요 ㅠㅠ??

sql

Answer 1

1

jaemin

group by 없이 바로 count 등의 집계함수를 사용하면 여러 개의 row가 있다 하더라도 단 하나의 row만 출력됩니다.

select id, student, count(id)
from seat

위 쿼리를 직접 돌려보시면 무슨 말인지 아실 거에요. 더 자세한 내용은 이 링크의 글을 참고해 보시면 좋을 것 같고요. 풀이 과정에서는 seat 테이블의 모든 row가 필요하기 때문에 count(id)가 아닌 count(*) over를 사용했습니다.

직접 작성하신 쿼리에서도 case 절 안의 count(S.id) 때문에 output이 한 줄만 출력되는 문제가 발생합니다. 강의 풀이처럼 여기를 count(*) over 로 바꾸는 방법이 있는데, 이렇게 해도 5줄이 아니라 3줄만 출력되고 정답 처리도 되지 않을 거에요.

왜냐하면 select 절보다 from 절의 join이 먼저 실행되기 때문입니다. join으로 서로 붙어서 만들어진 테이블로부터 select에 쓴 데이터를 가져오게 되는데, join key를 맵핑하는 과정에서 일부 row가 누락되었습니다.

s.id - 1 = s2.id  -- s.id=1일 경우 1-1=0인데 s2.id=0인 데이터는 없으므로 s.id=1인 row가 누락됩니다.
s.id + 1 = s3.id  -- s.id=5일 경우 5+1=6인데 s3.id=6인 데이터는 없으므로 s.id=5인 row가 누락됩니다.

만들어진 테이블이 모든 데이터를 포함하지 못하므로 이 안에서 연산을 해도 정답이 나오지 않습니다.

강의기간 연장문의

0

96

2

HackerRank : Weather Observation Station 11 문제풀이

0

116

1

SET4의 3번 자리바꾸기 문제 다른 풀이

0

186

1

set 3의 3번 문제- 데이터의 개수가 짝수일 때 질문

0

263

2

set 1 - 2번 문제풀이

0

258

1

세트2번 Binary Tree Nodes 질문입니다!

0

225

2

고급문제풀이set1 3번 문제

0

249

2

고급문제풀이 3번 INNERJOIN 활용시 오류

0

269

1

회사일하다 보니까 다 못듣고 수강기간이 다끝나가는데 .,. 수강기간 연장은 어떻게 할수 있나요?ㅜㅜ

0

320

1

[Weather 20 ] 2번째 쿼리도 따라 했는데 왜 다 실패일까요?

0

372

1

[Weather 20] 따라 했는데 왜 작동 안해요?

0

274

1

weather-20 왜 작동 안하는건가요?

0

226

1

Ollivander's Inventory 윈도우 함수 min() over

0

310

1

LeetCode 626. Exchange Seats 리트코드 제출 오류

0

506

2

섹션4에 3번 문제풀이 질문

0

376

2

SQL Project Planning 풀이 관련 문의

0

579

2

섹션 1번 4번문제 풀이

1

283

1

섹션1 2번 문제풀이 강의

0

301

1

set2 - 1 같게 작성했는데 답이 이상합니다.

0

285

1

max함수를 써서 풀지는 못하나요?

0

297

1

윈도우 함수를 이용해서 풀고 싶어서 써봤습니다. 더 간단하게 줄일 수 있을까요?

0

257

1

(Hacker Rank)Binary Tree 문제 질문

0

325

1

쿼리 두개로 작성하고 싶지 않아 하나로 어떻게든 만들어 봤습니다.

0

292

1

소수점 이하 숫자가 안나옵니다 ㅠㅠ

0

323

2