SQLite 그룹화 기준
SQLite의 GROUP BY 절은 SELECT 문과 함께 사용되어 동일한 데이터를 그룹화합니다.
SELECT 문에서는 GROUP BY 절이 WHERE 절 뒤, ORDER BY 절 앞에 옵니다.
구문
GROUP BY 절의 기본 구문은 다음과 같습니다. GROUP BY 절은 WHERE 절의 조건 뒤, ORDER BY 절 앞에 와야 합니다.
SELECT 열 목록
FROM 테이블 이름
WHERE [ 조건 ]
GROUP BY 열1, 열2....열N
ORDER BY 열1, 열2.... columnN
FROM 테이블 이름
WHERE [ 조건 ]
GROUP BY 열1, 열2....열N
ORDER BY 열1, 열2.... columnN
GROUP BY 절에서는 여러 열을 사용할 수 있습니다. 사용 중인 그룹이 열 목록에 나열되어 있는지 확인하세요.
예
COMPANY 테이블에 다음 레코드가 있다고 가정합니다. ------- ---------- ---------- ----------
1 Paul 32 캘리포니아 20000.02 Allen 25 Texas 15000.0
3 Teddy 23 NORWAY 20000.0
4 Mark 25 리치몬드 65000.0
5 데이비드 27 TEXAS 85000.0
6 KIM 22 South ON 10000.0 <>
4 Mark 25 리치몬드 65000.0
5 데이비드 27 TEXAS 85000.0
6 KIM 22 South ON 10000.0 <>
각 고객의 총 급여를 알고 싶다면 다음과 같이 GROUP BY 쿼리를 사용할 수 있습니다.
sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
다음 결과가 생성됩니다.
NAME SUM(SALARY)
------------------- --
Allen 15000.0
David 85000.0
James 10000.0
Kim 45000.0
Mark 65000.0
Paul 20000.0
Teddy 20000.0
------------------- --
Allen 15000.0
David 85000.0
James 10000.0
Kim 45000.0
Mark 65000.0
Paul 20000.0
Teddy 20000.0
이제 활용해보자 다음 INSERT 문을 사용하여 COMPANY 테이블에 세 개의 추가 레코드를 생성합니다.
INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00 );
INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00 );
INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00 );
INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00 );
INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00 );
이제 테이블에는 다음과 같이 이름이 중복된 레코드가 있습니다.
ID NAME — ADDRESS SALARY
------------ ----- --- -- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 ~ >5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
8 Paul 24 Houston 20000.0
9 제임스 44 노르웨이 5000.0
10 제임스 45 텍사스 5000.0
------------ ----- --- -- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 ~ >5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
8 Paul 24 Houston 20000.0
9 제임스 44 노르웨이 5000.0
10 제임스 45 텍사스 5000.0
동일한 GROUP BY 문을 사용하여 다음과 같이 NAME 열을 기준으로 모든 레코드를 그룹화합니다.
sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
이렇게 하면 다음과 같은 결과가 생성됩니다.
NAME 연봉)
---------- -----------
Allen 15000
David 85000
James 20000
Kim 45000
Mark 65000
Paul 40000
Teddy 20000
---------- -----------
Allen 15000
David 85000
James 20000
Kim 45000
Mark 65000
Paul 40000
Teddy 20000
다음과 같이 GROUP BY 절과 함께 ORDER BY 절을 사용하겠습니다.
sqlite> (SALARY)
FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
다음 결과가 생성됩니다:
NAME SUM(SALARY)
- --------- ---
테디 > 데이비드 85000
앨런 15000
- --------- ---
테디 > 데이비드 85000
앨런 15000