SQL활용 #7 - 그룹

1. 그룹

  • GROUP BY
  • SELECT 조건컬럼 FROM STUDENT1 GROUP BY(조건컬럼);
    : 앞뒤의 컬럼명은 일치해야함
  • 대부분은 내장함수를 사용한다.

1. COUNT(*)

  • 개수
  • SELECT 조건컬럼, COUNT(*) FROM STUDENT1 GROUP BY(조건컬럼);
  • 그룹, 반별 학생수(COUNT(*))
    : SELECT STDCLS 반, COUNT(*) FROM STUDENT1 GROUP BY(STDCLS);

2. SUM(컬럼)

  • 합계
  • SELECT 조건컬럼, SUM(합계낼컬럼) 국어합계 FROM STUDENT1 GROUP BY (조건컬럼);
  • 반별, 합계(SUM)
    : SELECT STDCLS 반, SUM(SCOREKOR) 국어합계 FROM STUDENT1 GROUP BY (STDCLS);

3. AVG(컬럼)

  • 평균
  • SELECT 조건컬럼, AVG(평균낼컬럼) FROM STUDENT1 GROUP BY(조건컬럼);
  • 반별, 평균(AVG)
    : SELECT STDCLS 반, AVG(SCOREKOR) 국어평균, SUM(SCOREKOR) 국어합계 FROM STUDENT1 GROUP BY (STDCLS);

4. ROUND(숫자, 자릿수)

  • 반올림
  • SELECT 조건컬럼, ROUND(숫자, 자릿수) FROM STUDENT1 GROUP BY(조건컬럼);
  • 반별, 평균(AVG), 반올림 (ROUND(숫자, 자리수)
    : SELECT STDCLS 반, ROUND(AVG(SCOREKOR),1) 국어평균, SUM(SCOREKOR) 국어합계 FROM STUDENT1 GROUP BY (STDCLS);

5. TO_CHAR(컬럼, '바꿀형식')

  • 문자열로 바꿈
  • TO_CHAR(REGDATE, 'YYYY-MM-DD HH24:MI')
  • 시간별은 TO_CHAR(REGDATE, 'YYYY-MM-DD HH24)
  • 분별, 합계
    : SELECT TO_CHAR(REGDATE, 'YYYY-MM-DD HH24:MI') 시간, COUNT(*) 개수 FROM STUDENT1 GROUP BY (TO_CHAR(REGDATE, 'YYYY-MM-DD HH24:MI'));

전체코드

-- 그룹    

-- 학생테이블에 컬럼 추가
-- STDCLS : VARCHR2(1) 반코드 ('A', 'B', 'C')
-- SCOREKOR : NUMBER(3)
-- SCOREENG : NUMBER(3)
-- SCOREMATH : NUMBER(3)
-- REGDATE : DATE

ALTER TABLE STUDENT1 ADD STDCLS VARCHAR2(1) DEFAULT 'A';
ALTER TABLE STUDENT1 ADD SCOREKOR NUMBER(3) DEFAULT 80;
ALTER TABLE STUDENT1 ADD SCOREENG NUMBER(3) DEFAULT 80;
ALTER TABLE STUDENT1 ADD SCOREMATH NUMBER(3) DEFAULT 80;
ALTER TABLE STUDENT1 ADD REGDATE DATE DEFAULT CURRENT_DATE; 

INSERT INTO STUDENT1(STDNO, STDNAME, STDTEL, STDCLS, SCOREKOR, SCOREENG, SCOREMATH, REGDATE)
    VALUES(SEQ_STD_CODE.NEXTVAL, '나다라', '0-0-0', 'B', 50, 45, 70, CURRENT_DATE);

SELECT * FROM STUDENT1;

-- 그룹, 반별 학생수(COUNT(*))
SELECT STDCLS 반, COUNT(*) FROM STUDENT1 GROUP BY(STDCLS);

-- 반별, 합계(SUM)
SELECT STDCLS 반, SUM(SCOREKOR) 국어합계 FROM STUDENT1 GROUP BY (STDCLS);

-- 반별, 평균(AVG), 반올림 (ROUND(숫자, 자리수)
SELECT STDCLS 반, ROUND(AVG(SCOREKOR),1) 국어평균, SUM(SCOREKOR) 국어합계 FROM STUDENT1 GROUP BY (STDCLS);

-- 반별, 평균
SELECT 
    STDCLS 반, 
    ROUND(AVG(SCOREKOR),1) 국어평균, 
    ROUND(AVG(SCOREENG),1) 영어평균, 
    ROUND(AVG(SCOREMATH),1) 수학평균     
FROM 
    STUDENT1 
GROUP BY (STDCLS);

-- 1. 수학점수가 50 이상인 학생들의 반별 평균점수
-- 내꺼 = 쌤꺼
SELECT 
    STDCLS 반,
    ROUND(AVG(SCOREMATH),1) 수학평균
FROM 
    STUDENT1
WHERE SCOREMATH >=50    
GROUP BY (STDCLS);    

-- 2. 반별 평균 수학점수가 50점 이상인것
SELECT 
    STDCLS 반,
    ROUND(AVG(SCOREMATH),1) 수학평균
FROM 
    STUDENT1    
GROUP BY (STDCLS) HAVING ROUND(AVG(SCOREMATH),1) >= 50;

-- 3. 분별, 합계
SELECT
    TO_CHAR(REGDATE, 'YYYY-MM-DD HH24:MI') 시간,
    COUNT(*) 개수
FROM 
    STUDENT1 
GROUP BY (TO_CHAR(REGDATE, 'YYYY-MM-DD HH24:MI'));

좋은 웹페이지 즐겨찾기