일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 수치미분
- PYTHON
- 신경망
- join
- 합계
- 제약조건
- PyQt5
- COUNT
- 미니배치
- 오차제곱합
- sum
- Next.js
- sigmoid
- max
- AVG
- MIN
- 밑바닥부터 시작하는 딥러닝
- Depthwise Convolution
- next.js 튜토리얼
- 렐루함수
- 최댓값
- 교차엔트로피오차
- 학습 구현
- Depthwise Separagle Convolution
- Pointwise Convolution
- 데이터베이스
- sqlite3
- 평균
- 시험데이터
- total
- Today
- Total
우잉's Development
SQLite3_집계함수 본문
COUNT 함수
count(인수)
괄호 안 인수는 컬럼명이나 *(별표)을 지정합니다.
1) 컬럼명일 경우 : NULL데이터를 제외한 행 수를 출력
2) * 별표일 경우 : 테이블의 행수를 출력, GROUP BY절을 사용하는 경우 그룹별로 행 수 출력
user 테이블을 생성하고 아래와 같이 데이터를 추가했습니다.
그리고 name과 address의 count를 출력하겠습니다. name 수를 cnt_name으로 address수를 cnt_address로 정의하겠습니다.
위와 같이 name의 값은 다 정의되어있어 5명이 나왔고 address의 값은 4번 Kang의 주소가 NULL값이므로 하나가 빠진 4가 출력됐습니다.
이 번에는 별표 * 를 사용해봅시다. count(*)을 사용했더니 테이블의 행 수인 5가 출력됐습니다.
이번에는 group by절을 사용해보겠습니다. gender을 그룹화 하여 출력해 봅시다.
group by절로 gender을 그룹화 했더니 M과 W으로 나눠서 행 수를 출력했습니다. null값을 가지고 있는 address로 해봅시다. address값이 NULL인 Kang은 여자이므로 여자의 count수가 하나 줄어 1이 출력될 것으로 예측합니다.
위와 같이 실행해보았습니다. 예측과 결과가 같네요. 지금까지 COUNT함수였습니다.
합계 함수(SUM , TOTAL)
1) sum :인수로 지정된 컬럼의 값의 합계를 출력하고, GROUP BY로 그룹별 합계 가능
sum(컬럼명)
- 컬럼에 저장된 값이 정수이면 출력은 정수
- 컬럼에 저장된 값들 중 NULL값만 존재하면 NULL로 출력
2) total : 인수로 지정된 컬럼의 값의 합계를 출력하고, GROUP BY로 그룹별 합계 가능
total(컬럼명)
- 컬럼에 저장된 값이 정수이면 출력은 부동 소수점
- 컬럼에 저장된 값이 NULL값만 존재하면 0.0을 출력.
위에 공통점과 차이점을 실습을 통해서 확인해보겠습니다.
store 테이블은 name, num, price로 데이터를 입력하겠습니다.
마지막 bag의 num은 NULL값이 입력됐습니다. 그럼 sum과 total의 차이를 봅시다
위와 같이 sum은 정수를 입력 후 정수인 10이 반환되었고, total은 정수를 입력받아 10.0인 부동소수점을 출력했습니다.
당연히 sum과 total둘다 부동소수점으로 입력받으면 출력 또한 부동소수점입니다.
이번에는 NULL값만 존재하는 테이블 product2를 생성하고 sum과 total의 차이점을 살펴보겠습니다.
sum은 null값만 있을 경우 null값이 반환되며 total은 0.0이 반환되는 것을 확입할 수 있습니다.
AVERAGE 평균 함수
avg(컬럼명)
avg함수는 인수에 있는 컬럼의 값의 평균을 구하는 함수입니다. 컬럼의 값들 중에 NULL이 아닌 값의 평균을 반환합니다.
만약 NULL값만 존재한다면 NULL을 반환하고 GROUP BY절을 사용하면 그룹마다 평균이 계산됩니다.
또한, 부동소수점으로 반환됩니다.
1-1 NULL값만 존재하는 테이블 product2로 avg함수를 사용
null값만 존재하므로 null로 반환되었습니다.
1-2 null값이 존재하는 store테이블 avg함수 사용
이번에는 store테이블의 num값의 avg를 구해보겠습니다.
bag의 num값 만 null이고 나머지로 평균을 구합니다. 어떻게 3.3333이 나왔는지 알아보면
num값들은 {3, 2, 5, null}입니다. 이들 중 null이 아닌 값을 합하면 10(3+2+5)입니다. 여기서 행의 전체 개수가 아닌 null값이 아닌 행수 3으로 나눠줍니다.
1-3 group by절을 이용한 avg함수 사용
원래 있던 user테이블은 지우고 새로 생성하고 point컬럼의 avg함수를 사용하면 76.0입니다.
결과는 (94+82+70+58) / 4 =76입니다. 정수로 입력했지만 부동소수점으로 나온다는 것을 확인할 수 있습니다.
이번에는 group by절을 사용하여 gender별로 avg함수를 사용해봅시다.
64.0 = (70+58) / 2
88.0 = (94+82) / 2
1-4 문자열이 저장된 경우
위에 사용한 user 테이블에 새로운 데이터를 추가해봅시다.
point컬럼에 integer이 들어가야 하지만 문자열이 추가되었습니다. 이때 avg함수를 구해보겠습니다.
이번엔 문자열이 들어갔을 때 60.8이 출력되었습니다. 문자열이 들어가기 전에 평균은 76인데 60.8로 떨어진 것을 확인할 수 있었습니다. 어떻게 계산된 걸까요?
(94+82+70+58+0) / 5 = 60.8로 계산되었습니다. point가 문자열인 부분을 0으로 계산하고 문자열인 행도 합하는 계산에 추가되었으므로 행의 개수도 5개로 나누었습니다. null인 경우라 차이가 있다는 것을 주의하셔야 합니다.
MAX 함수
max(컬럼명)
인수에 지정된 컬럼의 값들 중 최대 값을 출력합니다. GROUP BY절을 사용하는 경우 그룹마다 최대 값을 반환합니다.
위에서 사용한 user테이블을 사용합니다. 그러나 point컬럼에 문자열이 들어간 행은 지우고 max함수를 사용해봅시다.
(문자열이 있을 경우 max값은 문자열이 있는 값이 해당)
group by절을 사용해보겠습니다.
이번에는 point컬럼에 null값인 데이터를 추가하고 max함수를 사용해보겠습니다.
동일한 94가 나옵니다.
MIN 함수
min(컬럼명)
인수에 지정된 컬럼의 값들 중 최소 값을 출력합니다. GROUP BY절을 사용하는 경우 그룹마다 최소 값을 반환합니다.
(max와 이여서 하시면 Lee 데이터 삭제 후 실행하세요.)
min함수 사용해보면 전체 데이터 중 point가 가장 낮은 58이 출력됩니다.
이번엔 group by를 사용해봅시다.
gender가 M일 경우 58이 가장 적고 W일 경우 82가 가장 큽니다.
자! 그러면 문자열이 추가되었을 때 max는 최대 값이 문자열로 출력되었습니다. min은 어떨까요?
문자열 데이터를 추가하고
min의 결과를 확인해봅시다.
문자열을 추가하고 min을 해보았더니 문자열이 추가되기 전의 값이랑 동일합니다.
그럼 null값을 넣으면 어떻게 될까요?
update문을 활용하여 null값으로 수정후 min함수를 실행하겠습니다.
NULL값이어도 동일한 값이 나오는 것을 확인할 수 있습니다.
마지막으로 null값과 문자열 값이 둘 다 공존할 때 max와 min값을 보겠습니다.
null값은 max와 min에 관여를 하지 않지만 문자열은 가장 큰 값으로 출력됩니다.
다음 게시글에서는 다른 여러 가지 함수를 더 공부해보도록 하겠습니다.
읽어주셔서 감사합니다. ^^
'개발 > SQLite3' 카테고리의 다른 글
SQLite3_문자열 관련 함수 (0) | 2022.01.10 |
---|---|
SQLite3_group_concat, 날짜-시간 함수 (0) | 2022.01.10 |
SQLite3_명령어2 (0) | 2022.01.07 |
SQLite3_명령어1 (0) | 2022.01.07 |
SQLite3_NATURAL 키워드, SELF JOIN (0) | 2022.01.07 |