🎯 SQL 문제를 푸는 ‘생각 흐름’ 정리
💡 1단계: 요구 조건을 말로 잘게 쪼개기
먼저 문제를 "프로그래밍 언어"가 아니라 사람의 언어로 잘게 나눠서 이해해야 해요.
예:
“공용어가 영어 또는 프랑스어인 나라의 수를 언어별로 조회”
→ 이걸 아래처럼 나눠서 생각해요:
- 대상 테이블은 어디? → countrylanguage
- 조건: 언어가 영어 또는 프랑스어 (language IN (...))
- 조건: 공용어여야 함 (IsOfficial = 'T')
- 세야 할 것: 나라 수 (COUNT(DISTINCT CountryCode))
- 그룹 기준: 언어별 (GROUP BY Language)
🧠 2단계: 필터링 조건과 그룹화 대상 구분하기
- WHERE절은 "먼저 데이터에서 걸러내는 조건"
- GROUP BY는 "걸러낸 데이터를 어떤 기준으로 묶을지"
- SELECT는 "묶인 그룹에서 뭘 보여줄지"
이 순서를 기억하세요:
👉 WHERE → GROUP BY → SELECT
🧩 3단계: 각 요소를 SQL 구문으로 치환하기
위의 말들을 바로 SQL로 바꿔봅니다:

✅ 최종 SQL:
SELECT Language, COUNT(DISTINCT CountryCode) AS count_country
FROM countrylanguage
WHERE Language IN ('English', 'French')
AND IsOfficial = 'T'
GROUP BY Language;
🪄 팁: 문제 읽을 때 이렇게 떠올려보세요
"무엇을 보여주려고 하지?"
→ 보여줄 컬럼이 SELECT에 들어가요
"어떤 조건으로 걸러야 하지?"
→ WHERE 절에 들어가요
"어떤 기준으로 묶어야 하지?"
→ GROUP BY 절에 들어가요
"묶은 결과에서 무엇을 계산해야 하지?"
→ SELECT 안의 COUNT, SUM 등 집계함수
📌 연습용 사고 흐름 예제
"2000년 이후 독립한 나라들 중 정부 형태가 공화국인 나라 수"
- 테이블? → country
- 조건? → IndepYear > 2000 AND GovernmentForm LIKE '%Republic%'
- 세야 할 것? → 나라 수 → COUNT(*)
SELECT COUNT(*)
FROM country
WHERE IndepYear > 2000
AND GovernmentForm LIKE '%Republic%';
🏁 요약: SQL 잘 하려면?

그럼 위에서 설명한 생각 흐름 훈련법을 기반으로, 점점 난이도가 올라가는 실전 연습문제 5개를 준비했어요.
🧩 연습 문제 1: 기본적인 그룹화
문제 1.
도시(city) 테이블에서 도시들의 인구를 500만 단위로 나누어(FLOOR) 그룹화하고, 각 그룹에 해당하는 도시 수를 구하세요.
결과 컬럼은 pop_group, city_count로 출력하세요.
👉 힌트: Population을 500만으로 나눔, GROUP BY는 나눈 값
🧩 연습 문제 2: 조건 있는 그룹화
문제 2.
country 테이블에서 인구(Population)가 1,000만 명 이상인 나라들만 대상으로 대륙(Continent)별 나라 수를 구하세요.
결과 컬럼은 Continent, country_count로 출력하세요.
👉 힌트: WHERE에서 인구 조건 먼저 걸고 GROUP BY Continent
🧩 연습 문제 3: 집계함수와 DISTINCT
문제 3.
countrylanguage 테이블에서 공용어(IsOfficial = 'T')로 등록된 언어 중, 언어별로 몇 개의 서로 다른 나라(CountryCode)에서 사용되는지 구하세요.
결과 컬럼은 Language, country_count로 출력하세요.
👉 힌트: COUNT(DISTINCT CountryCode), GROUP BY Language
🧩 연습 문제 4: 그룹 후 조건 필터(HAVING)
문제 4.
city 테이블에서 나라별(CountryCode)로 도시 수를 구하되, 도시가 50개 이상인 나라만 결과에 포함시키세요.
결과 컬럼은 CountryCode, city_count로 출력하세요.
👉 힌트: GROUP BY CountryCode → HAVING COUNT() >= 50*
🧩 연습 문제 5: 실전형 조합
문제 5.
countrylanguage 테이블에서 영어 또는 프랑스어가 공용어로 지정된 나라 수를 언어별로 구하세요.
결과 컬럼은 Language, country_count로 출력하세요.
👉 힌트: WHERE Language IN (...) AND IsOfficial = 'T', COUNT(DISTINCT CountryCode)
📝 이렇게 푸는 연습 해봐요
모든 문제에 대해 먼저:
- 📌 "어떤 기준으로 묶고"
- 📌 "무엇을 세고"
- 📌 "필터는 언제 하고"
이런 흐름을 종이에 적어본 뒤 SQL로 바꿔보는 걸 추천해요.
여러분도 각자 풀어보세요. 이후 답도 나와있습니다.
내가 푼 답을 기준으로 피드백된 부분을 적어놓겠습니다.
✅ 문제 1
SELECT FLOOR(Population / 5000000) AS POP, COUNT(*) FROM CITY
GROUP BY POP;
✔️ 완벽합니다! FLOOR로 500만 단위 그룹화했고, GROUP BY도 잘 썼어요.
💡 팁: AS POP보다는 AS pop_group처럼 좀 더 의미 있는 별칭 쓰면 가독성이 좋아져요.
✅ 문제 2
SELECT continent, count(country) as countcon FROM COUNTRY
WHERE Population >= 10000000
GROUP BY continent;
⚠️ 거의 맞지만, COUNT(country)는 country 컬럼에 중복이 없을 경우만 정확해요.
→ 보통은 COUNT(*) 또는 COUNT(Code)를 써요. (이 테이블에서 나라 식별자는 Code)
✅ 수정 추천:
SELECT Continent, COUNT(*) AS country_count
FROM Country
WHERE Population >= 10000000
GROUP BY Continent;
SELECT Language, count(countrycode) as countcon FROM countrylanguage
WHERE IsOfficial = "T"
GROUP BY Language;
⚠️ 거의 맞지만, count(countrycode)는 중복된 나라가 포함될 수 있어요.
→ 예: 어떤 언어가 같은 나라 코드에 2번 있으면 2로 세어짐.
✅ 요구 조건은 **‘서로 다른 나라 수’**니까:
SELECT Language, COUNT(DISTINCT CountryCode) AS country_count
FROM CountryLanguage
WHERE IsOfficial = 'T'
GROUP BY Language;
SELECT CountryCode, count(countrycode) as countcon FROM city
GROUP BY CountryCode
HAVING countcon >= 50;
⚠️ 쿼리는 거의 맞았어요!
다만 HAVING countcon >= 50에서 **별칭(countcon)**은 HAVING 절에서는 일부 DBMS에서 작동 안 함.
✅ 안전한 방식 (가장 호환성 좋음):
SELECT CountryCode, COUNT(*) AS city_count
FROM City
GROUP BY CountryCode
HAVING COUNT(*) >= 50;
✅ 문제 5
SELECT Language, count(DISTINCT CountryCode) FROM countrylanguage
WHERE IsOfficial = "T"
AND Language IN ("English", "French")
GROUP BY Language
ORDER BY Language;
👏 정확하게 정답입니다!
- 조건도 정확히 맞췄고,
- DISTINCT CountryCode도 잘 썼고,
- 정렬까지 완벽합니다.
🔍 전체 총평

🎯 다음 단계 추천
- GROUP BY 안 헷갈리게 하려면 항상 "무엇을 기준으로 묶고", "무엇을 세는가" 를 말로 먼저 정리해보세요.
- DISTINCT, HAVING, FLOOR 같은 키워드는 따로 써서 작은 실습도 해보는 게 좋아요
'국비지원 - 실버마케팅(코딩) 250206~' 카테고리의 다른 글
| 💻 SQL 테이블 조회와 확인 명령어 완전 정리 (입문 + 심화) (0) | 2025.05.15 |
|---|---|
| 🔧 SQL로 배우는 CRUD - 데이터베이스의 기본 (1) | 2025.05.15 |
| 0514 실습 문제 틀린 것 복습 (1) | 2025.05.14 |
| 💻 MySQL 기본 정리 – 데이터 조회부터 집계까지 (1) | 2025.05.13 |
| MySQL Workbench에서 자료 불러오고 조건 조회하는 법 (SQL 기초 완전 정리) (2) | 2025.05.13 |