SQLite-GROUP BY 절
SQLite GROUP BY 절은 SELECT 문과 협력하여 동일한 데이터를 그룹으로 배열하는 데 사용됩니다.
GROUP BY 절은 SELECT 문에서 WHERE 절 뒤에 나오며 ORDER BY 절 앞에옵니다.
통사론
다음은 GROUP BY 절의 기본 구문입니다. GROUP BY 절은 WHERE 절의 조건을 따라야하며 ORDER BY 절이 사용되는 경우 앞에 와야합니다.
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN
GROUP BY 절에 둘 이상의 열을 사용할 수 있습니다. 그룹화하는 데 사용하는 열이 무엇이든 해당 열이 열 목록에서 사용 가능해야합니다.
예
다음 레코드가있는 COMPANY 테이블을 고려하십시오.
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 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
이제 다음 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 );
이제 테이블에 중복 이름이있는 다음 레코드가 있습니다.
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
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 James 44 Norway 5000.0
10 James 45 Texas 5000.0
다시, 동일한 문을 사용하여 다음과 같이 NAME 열을 사용하는 모든 레코드를 그룹화합니다.
sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
그러면 다음과 같은 결과가 생성됩니다.
NAME SUM(SALARY)
---------- -----------
Allen 15000
David 85000
James 20000
Kim 45000
Mark 65000
Paul 40000
Teddy 20000
다음과 같이 GROUP BY 절과 함께 ORDER BY 절을 사용하겠습니다.
sqlite> SELECT NAME, SUM(SALARY)
FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
그러면 다음과 같은 결과가 생성됩니다.
NAME SUM(SALARY)
---------- -----------
Teddy 20000
Paul 40000
Mark 65000
Kim 45000
James 20000
David 85000
Allen 15000