(Database : Basic-10) GROUP BY

Posted by : at

Category : Database


USE BaseballData

-- 복습
-- 2004년 보스턴 소속의 타격정보
SELECT *
FROM batting
WHERE yearId = 2004 AND teamId = 'BOS'

-- Q 2004년도에 가장 많은 홈런을 날린 팀은?
SELECT *
FROM batting
WHERE yearId = 2004
ORDER BY teamID
-- 팀별 홈런의 개수를 카운트 해야한다.
-- teamID를 기준으로 GROUP을 나누자
SELECT teamID   -- teamID만 보여달라는 것은 GROUP BY를 할경우 playerID와 같은 string정보는 합치거나 어떻게 할수 없기에 에러가 발생하게 된다.
FROM batting
WHERE yearId = 2004
GROUP BY teamID

팀까지 출력이 됨

SELECT teamID, COUNT(teamID) AS playerCount, SUM(HR) AS homeRuns
FROM batting
WHERE yearId = 2004
GROUP BY teamID

SELECT TOP 1 teamID, SUM(HR) AS homeRuns
FROM batting
WHERE yearId = 2004
GROUP BY teamID
ORDER BY homeRuns DECS
-- 2004년도에 200홈런 이상을 기록한 팀
SELECT TOP 1 teamID, SUM(HR) AS homeRuns
FROM batting
WHERE yearId = 2004 AND homeRuns >= 200 -- Error : homeRuns가 생성되기전 WHERE가 호출됨
GROUP BY teamID
ORDER BY homeRuns DECS

--

SELECT TOP 1 teamID, SUM(HR) AS homeRuns
FROM batting
WHERE yearId = 2004
GROUP BY teamID
HAVING SUM(HR) >= 200 -- 그룹지정 이후 WHERE과 동일
ORDER BY homeRuns DECS

/*
실행순서를 다시 정리하면
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
*/
-- 단일 년도에 가장 많은 홈런을 날린 팀은?
SELECT teamID, yearID SUM(HR) AS homeRuns
FROM batting
GROUP BY teamID, yearID
ORDER BY homeRuns DECS

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links