🧠 SQL 연습문제 – batting 테이블


🔍 사전 정보

batting 테이블은 야구 선수들의 시즌별 타격 기록을 저장합니다.

컬럼명설명
playerID선수 ID
yearID시즌 연도
teamID팀 이름 (예: 'BOS' = 보스턴)
G_batting출전 경기 + 타석
AB타수 (At Bat)
H안타 (Hits)
R득점 (Runs)
2B, 3B2루타, 3루타
HR홈런 (Home Runs)
BB볼넷 (Base on Balls)

📝 문제 및 풀이


✅ 문제 1: 팀명이 보스턴인 선수 정보 출력

SELECT *
FROM batting
WHERE teamID = 'BOS';
  • WHERE절을 사용해 보스턴 팀(BOS)만 필터링

✅ 문제 2: 보스턴 소속 선수 수 (중복 제거)

SELECT COUNT(DISTINCT playerID)
FROM batting
WHERE teamID = 'BOS';
  • 중복 제거를 위해 DISTINCT playerID
  • → 동일 선수가 여러 시즌 출전해도 1명으로 카운트됨
  • 결과 예시: 1655

✅ 문제 3: 2004년 보스턴팀의 총 홈런 수

SELECT SUM(HR)
FROM batting
WHERE teamID = 'BOS' AND yearID = 2004;
  • 조건을 2개 걸어야 하므로 AND 사용
  • 총 홈런의 합계를 구하기 위해 SUM(HR)
  • 결과 예시: 222

✅ 문제 4: 보스턴 팀에서 단일 연도 최다 홈런 선수

방법 1 – MAX()로 홈런 수 구하고, 그 선수 정보 다시 조회

-- 최대 홈런 수 조회
SELECT MAX(HR)
FROM batting
WHERE teamID = 'BOS';

-- 해당 홈런 수를 기록한 선수 정보 조회
SELECT *
FROM batting
WHERE teamID = 'BOS' AND HR = 54;

결과: HR = 54 (예: David Ortiz)

방법 2 – TOP 1 + ORDER BY DESC 활용 (가장 많이 친 사람 1명)

SELECT TOP 1 *
FROM batting
WHERE teamID = 'BOS'
ORDER BY HR DESC;

TOP 1과 내림차순 정렬(DESC) 조합은 실무에서도 자주 쓰이는 패턴입니다.

추가: 선수 이름 확인 (ID로 조회)

SELECT *
FROM players
WHERE playerID = 'ortizda01';

🎯 핵심 요약

문제 번호핵심 문법요약 설명
1번WHERE특정 조건(teamID='BOS') 필터링
2번COUNT(DISTINCT col)중복 제거 후 개수 세기
3번SUM(col) + WHERE조건 만족하는 데이터들의 합계 구하기
4번TOP 1 + ORDER BY DESC최댓값 기준 정렬 후 1개만 출력

💡 실무 팁

  • COUNT(DISTINCT col)중복 제거 + 집계 조합
  • TOP N랭킹, 상위 N개 조회 시 자주 사용
  • 문제가 생긴 로그/데이터 분석 시에도 이런 쿼리들이 매우 유용

🛠 확장 예시 (실습용)

-- 시즌별 보스턴 홈런 수 정렬
SELECT yearID, SUM(HR) AS totalHR
FROM batting
WHERE teamID = 'BOS'
GROUP BY yearID
ORDER BY totalHR DESC;

-- 보스턴 선수가 누적 홈런이 가장 많은 선수 TOP 5
SELECT playerID, SUM(HR) AS totalHR
FROM batting
WHERE teamID = 'BOS'
GROUP BY playerID
ORDER BY totalHR DESC
OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY;
profile
李家네_공부방

0개의 댓글