What a Beautiful Data!

복수 국적 메달 수상한 선수 찾기 mysql 문제풀이

by darami

https://solvesql.com/problems/multiple-medalist/

 

solvesql

© Copyright 2021-2022 solvesql.com

solvesql.com

 

복수 국적자 찾으려면? 조금씩 풀이를 해보려고 

이렇게 했다. 

SELECT r.athlete_id as aid
,COUNT(*)
FROM records as r
WHERE medal IN ('Silver','Gold','Bronze')
GROUP BY aid
LIMIT 100

하지만 역시 여러개가 조인 가능한 테이블이 있으면 그곳에 다중 조인을 하는 것이 더 효과적이다, 

그리고 그냥 JOIN 을 해버리면 다 붙어있는 records의 많은 부분이 생략되어 나타남으로 LEFT JOIN을 하는 것이 맞다. 

 

- 그리고 공백과 null은 달라서 is not null로 해줬는데 여기서는 왜 이게 되는걸까? 

: mysql에서 공백과 null은 같은 것? 질문함 

Q: 안녕하세요 저도 solvesql 질문 있습니다. '복수 국적 메달 수상한 선수 찾기' 문제에서 메달 기록이 없는 경우 공백은 null과 다르다고 생각해서 처음에 is not null 로 처리를 해주지 않았는데요. 대부분의 풀이에서 is not null로 처리를 하는 것 같아  mysql에서 공백은 null로 같이 처리되나요? 인터넷에서 명확한 답변을 찾지 못해 질문드립니다.

선미님 답변: 값이 비어있는 경우에 비어있는 문자열이거나, null 이라고 이해하시면 되는데요. 비어있는 문자열을 넣는 경우는 거의 없어서 null 로 보시면 될 것 같아요. 관련해서 stackoverflow 에 질문 답변이 오간 타래가 있어서 공유할게요.

https://stackoverflow.com/questions/8470813/how-do-i-check-if-a-column-is-empty-or-null-in-mysql

 

How do I check if a column is empty or null in MySQL?

I have a column in a table which might contain null or empty values. How do I check if a column is empty or null in the rows present in a table? (e.g. null or '' or ' ' or ' ' and ...)

stackoverflow.com

- 이 부분은 스터디를 하면서 완전히 이해했다.

 

- 계속 어떻게 국적이 두개인 것을 알아낼까, 셀프 조인해야하나 생각해야하는데 간편한 distinct를 잊었다니..! 

SELECT a.name
FROM records r
LEFT JOIN athletes a ON a.id=r.athlete_id
LEFT JOIN teams t ON t.id=r.team_id
LEFT JOIN games g ON g.id=r.game_id
WHERE g.year >=2000 AND r.medal IS NOT NULL
GROUP BY athlete_id
HAVING COUNT(distinct team) > 1
블로그의 프로필 사진

블로그의 정보

다람

darami

활동하기