문제
다음 조건을 만족하면서, <성적> 테이블을 대상으로 과목별 점수의 평균이 90 이상인 과목이름, 최소점수, 최대점수를 출력하는 SQL문을 작성하시오.
[ 조건 ]
- 대소문자를 구분하지 않는다.
- WHERE 구문을 사용하지 않는다.
- GROUP BY, HAVING 구문을 반드시 사용한다.
- 세미콜론(;)은 생략 가능하다.
- 최소점수, 최대점수 별칭을 위해 AS문을 사용해야 한다.
[ 테이블명: 성적 ]
[ 결과 ]
정답
SELECT
과목이름,
MIN(점수) AS 최소점수,
MAX(점수) AS 최대점수
FROM 성적
GROUP BY 과목이름
HAVING AVG(점수) >= 90
해설
[참고]
▼ SQL 기본 구문 정리 select from where and/or group by having order by ▼
이 문제는 SQL의 집계 함수와 GROUP BY, HAVING 구문의 활용 방법을 묻는 기출 문제입니다.
이 문제는 GROUP BY와 HAVING 구문을 이용해 데이터를 그룹화하고 필터링하는 방식에 대한 이해를 요구합니다.
WHERE 구문 대신 HAVING을 사용해 그룹화된 데이터에 조건을 적용하였으며, 집계 함수 MIN, MAX, AVG를 통해 필요한 통계 정보를 구했습니다.
1. 전체 해설
🟥 1. 성적 테이블에서 모든 데이터 조회.
🟥 2. 과목이름으로 그룹화.
- "데이터베이스"와 "프로그래밍언어" 두 개의 그룹 생성.
🟥 3. 각 그룹의 평균 점수 계산.
- "데이터베이스"의 평균 점수는 90, "프로그래밍언어"의 평균 점수는 82.5로 계산.
🟥 4. 평균 점수가 90 이상인 그룹만 선택.
- 조건을 만족하는 그룹은 "데이터베이스".
🟥 5. 선택된 "데이터베이스" 그룹에 대해 최소 점수와 최대 점수 계산.-
"데이터베이스" 그룹에서 최소 점수는 85, 최대 점수는 95로 계산.
🟥 6. 최종 결과 반환.
- 결과는 "데이터베이스", 최소점수 85, 최대점수 95로 반환.
2. 상세 해설
📌 1. SELECT 구문:
SELECT 형식 :
SELECT 컬럼1, 컬럼2, ..., 집계함수(컬럼명) AS 별칭
FROM 테이블명
- SELECT 구문에서는 출력하고자 하는 컬럼을 지정합니다. 조회할 컬럼이나 계산식을 지정합니다. 여러 개의 컬럼을 조회할 때는 쉼표로 구분합니다. 집계 함수(SUM, MIN, MAX, AVG 등)를 사용하여 계산된 값을 구할 수 있으며, AS를 통해 별칭을 지정할 수 있습니다.
- FROM은 데이터를 조회할 테이블을 지정합니다.
AS 형식 :
SELECT 컬럼명 또는 계산식 AS 별칭명
FROM 테이블명
- SQL에서 별칭(Alias)은 테이블이나 컬럼에 임시 이름을 지정하는 기능으로, AS 키워드를 사용해 작성합니다.
AS 키워드를 통해 컬럼 또는 테이블에 임시 이름을 지정하며, 이를 통해 쿼리의 가독성과 결과의 명확성을 높일 수 있습니다.
MIN()과 MAX() 함수 형식 :
SELECT MIN(컬럼명) FROM 테이블명;
SELECT MAX(컬럼명) FROM 테이블명;
- MIN()과 MAX() 함수는 SQL에서 테이블 또는 그룹 내에서 가장 작은 값과 가장 큰 값을 반환하는 집계 함수입니다.
이 함수들은 수치형뿐만 아니라 날짜형, 문자형 데이터에도 적용할 수 있습니다.
NULL 값은 무시되며, 문자형 데이터에 대해서는 사전 순서(알파벳 순서)로 비교가 이루어집니다.
SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수
FROM 성적
- SELECT 구문에서는 출력하고자 하는 컬럼을 지정합니다.
이 문제에서는 과목이름, 과목별 최소 점수, 과목별 최대 점수를 출력해야 합니다.
문제에서 주어진 결과 테이블을 보면, 출력 결과가 '과목이름', '최소점수', '최대점수'로 구성되어 있으므로, 이 컬럼들이 SELECT 구문에 포함되어야 합니다.
- MIN(점수) AS 최소점수:
- MIN(점수): 점수 컬럼에서 가장 낮은 값을 찾아 반환하는 집계 함수입니다. 이 함수는 성적 테이블 내의 모든 점수 중에서 가장 낮은 값을 계산합니다.
- AS 최소점수: MIN(점수)의 결과에 별칭(별명)을 지정합니다. 이 별칭은 결과 집합에서 해당 컬럼의 이름을 최소점수로 설정하여, 결과를 해석할 때 더 이해하기 쉽게 합니다.
- MAX(점수) AS 최대점수:
- MAX(점수): 점수 컬럼에서 가장 높은 값을 찾아 반환하는 집계 함수입니다. 이 함수는 성적 테이블 내의 모든 점수 중에서 가장 높은 값을 계산합니다.
- AS 최대점수: MAX(점수)의 결과에 별칭을 부여하여 결과 집합에서 해당 컬럼의 이름을 최대점수로 설정합니다.
- FROM 성적은 SQL 쿼리에서 데이터를 조회할 테이블을 지정하는 부분입니다. 이 구문은 쿼리가 어느 테이블을 대상으로 작업을 수행할지 SQL 엔진에 알려줍니다. 여기서는 성적이라는 테이블에서 데이터를 가져오도록 설정되었습니다.
📌 2. GROUP BY와 HAVING 구문:
형식 :
SELECT 컬럼1, 집계함수(컬럼2), ...
FROM 테이블명
GROUP BY 그룹화할_컬럼
HAVING 조건;
- GROUP BY는 쿼리의 SELECT에서 집계 함수가 사용될 때 반드시 필요한 구문입니다. GROUP BY는 주로 집계 함수(MIN 최소 값, MAX 최대 값, AVG 평균 값 등)를 사용할 때 함께 활용됩니다.
- 데이터를 특정 컬럼(예: 과목이름)으로 그룹화하면, 같은 값을 가진 데이터들이 하나의 그룹으로 묶입니다.
- HAVING 구문은 WHERE과 유사하지만, 그룹화된 데이터에 조건을 걸기 위해 사용됩니다. 주로 집계 함수의 결과를 필터링하는 데 쓰입니다.
- 일반적으로 WHERE 절은 개별 행을 필터링할 때 사용되지만, HAVING은 집계 결과에 대한 조건을 적용하는 데 사용됩니다.
GROUP BY 과목이름
HAVING AVG(점수) >= 90
- "GROUP BY 과목이름"을 사용해 과목 이름을 기준으로 데이터를 그룹화합니다. ("데이터베이스"와 "프로그래밍언어" 두 개의 그룹 생성) 이 구문 덕분에 동일한 과목 이름을 가진 행끼리 묶이게 됩니다.
AVG 함수 형식 :
SELECT AVG(열이름)
FROM 테이블이름
WHERE 조건;
- AVG는 SQL에서 평균값(Average)을 계산하는 함수입니다. 특정 열의 값들의 평균을 구할 때 사용됩니다.
- HAVING AVG(점수) >= 90 조건은 각 과목별 그룹에서 평균 점수가 90 이상인 그룹만 남기게 합니다.
즉, 과목별로 계산된 평균 점수가 90 이상인 과목만 결과에 포함됩니다.
📌 3. 전체 쿼리의 결과:
SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수
FROM 성적
GROUP BY 과목이름
HAVING AVG(점수) >= 90
- 데이터 조회 :
성적 테이블에서 모든 데이터 조회. - 그룹화 :
과목이름으로 그룹화하여 "데이터베이스"와 "프로그래밍언어" 두 개의 그룹 생성. - 조건 필터링 :
평균계산해 평균 점수가 90 이상인 그룹("데이터베이스")만 선택.
"데이터베이스": 평균 90(조건 충족) / "프로그래밍언어": 평균 82.5 (조건 미충족) - 집계 계산 :
데이터베이스 그룹에 대해 점수의 최소값, 최대값 계산
"데이터베이스": 최소 85, 최대 95 - 결과 반환
"데이터베이스", 최소점수 85, 최대점수 95
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'코딩일기 > 자격증' 카테고리의 다른 글
[정보처리기사] DDL(Data Definition Language, 데이터 정의어) | 정보처리사 실기 기출 (1) | 2024.11.09 |
---|---|
[정보처리기사] DML(Data Manipulation Language, 데이터 조작어) | 정보처리사 실기 기출 (0) | 2024.11.08 |
[정보처리기사] EAI(Enterprise Application Integration) 구축 유형 | 정보처리기사 실기 기출문제 (0) | 2024.10.29 |
[정보처리기사] [ C ] while문 | 2020년 정보처리기사 기출문제 (0) | 2024.10.16 |
[정보처리기사] [ Java ] 클래스, 객체, 상속, 생성자, super | 2020년 2회 정보처리기사 실기 기출문제 (0) | 2024.10.15 |