복수 국적 메달 수상한 선수 찾기 mysql 문제풀이
by daramihttps://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