SQL(2) Data Type
DATA TYPE
Data에도 다양한 타입이 있습니다.
테이블을 보면 숫자는 대부분 INT로 끝나고, INT는 종류별로 그 안에 넣을 수 있는 바이트(bite) 수가 다릅니다. 숫자의 범위와 크기에 따라 데이터 타입을 정해줍니다.
SELECT * FROM 도서대출내역2;
for row in c.execute('SELECT * FROM 도서대출내역2;'):
print(row)
>>>
('101', '문강태', '2020-06', '20일')
('102', '고문영', '2020-06', '10일')
('103', '문상태', '2020-06', '8일')
('104', '강기둥', '2020-06', '3일')
데이터 타입을 바꿔보도록 하겠습니다!
위의 데이터는 테이블로 다시 보면
해당 데이터인데요. 여기서 평균 대출일수를 알고 싶다면 대출일수에 AVG() 함수를 쓰면 됩니다. 하지만 대출일수의 데이터 타입은 숫자형이 아닌 것 같습니다.
TYPE 확인 - pragma table_info('테이블명')
데이터들의 타입을 확인해보겠습니다. sqlite에서는 데이터의 타입 정의를 pragma table_info('테이블명')문을 제공합니다.
import os
db_path = os.getenv('HOME')+'/mydb.db'
conn = sqlite3.connect(db_path)
c = conn.cursor()
for row in c.execute('pragma table_info(도서대출내역)'):
print(row)
>>>
(0, 'ID', 'varchar', 0, None, 0)
(1, '이름', 'varchar', 0, None, 0)
(2, '도서ID', 'varchar', 0, None, 0)
(3, '대출일', 'varchar', 0, None, 0)
(4, '반납일', 'varchar', 0, None, 0)
데이터 타입을 보니 모드 VARCHAR로 되어 있습니다. 문자형 데이터니 숫자형으로 변환시켜 보겠습니다.
대출일수 데이터 뒤에 붙은 '일'을 떼어내야겠습니다.
LEFT, RIGHT, SUBSTR() 함수
문자열을 떼어내는 함수는 LEFT, RIGHT, SUBSTRING을 사용하면 됩니다. sqlite에서는 SUBSTR()입니다.
SELECT *, SUBSTR(대출일수, 1, (length(대출일수)-1)) AS 대출일수_수정
FROM 도서대출내역2;
split_part()
하지만 여기서 '일'만 떼어내기엔 8일, 10일 등 글자수가 ○일, ○○일 등 형태가 다릅니다. 이때 split_part() 함수를 사용합니다.
for row in c.execute('SELECT *, SUBSTR(대출일수, 1, length(대출일수)-1)) AS 대출일수_수정 FROM 도서대출내역2;'):
print(row)
>>>
('101', '문강태', '2020-06', '20일', '20')
('102', '고문영', '2020-06', '10일', '10')
('103', '문상태', '2020-06', '8일', '8')
('104', '강기둥', '2020-06', '3일', '3')
CAST()
그 다음은 CAST 함수를 이용하여, 잘라내진 부분에 더하여 숫자로 변환해 보겠습니다.
SELECT *, CAST(SUBSTR(대출일수, 1, (length(대출일수)-1)) AS INT) AS 대출일수_수정
FROM 도서대출내역2 ;
for row in c.execute('SELECT *, CAST(SUBSTR(대출일수, 1, length(대출일수)-1)) AS INT) AS 대출일수_수정 FROM 도서대출내역2 ;'):
print(row)
>>>
('101', '문강태', '2020-06', '20일', 20)
('102', '고문영', '2020-06', '10일', 10)
('103', '문상태', '2020-06', '8일', 8)
('104', '강기둥', '2020-06', '3일', 3)
CAST()는 형 변환을 위한 함수입니다.
CAST(형 변환하고 싶은 컬럼명 AS 변환하고 싶은 타입)
대출일수_수정 컬럼은 그렇게 INT형으로 바뀌었답니다.
이제 필요한 컬럼만 불러오겠습니다.
SELECT ID, 이름, 대출년월, AVG(CAST(SUBSTR(대출일수, 1, length(대출일수)-1)) AS INT)) AS 대출일수_평균
FROM 도서대출내역2
GROUP BY 1, 2, 3;
for row in c.execute('SELECT ID, 이름, 대출년월, AVG(CAST(SUBSTR(대출일수, 1, (length(대출일수)-1)) AS INT)) AS 대출일수_평균 FROM 도서대출내역2 GROUP BY 1, 2, 3;'
print(row)
>>>
('101', '문강태', '2020-06', 20.0)
('102', '고문영', '2020-06', 10.0)
('103', '문상태', '2020-06', 8.0)
('104', '강기둥', '2020-06', 3.0)
집계함수를 사용할 때는 GROUP BY를 씁니다. 뒤에는 컬럼명 또는 숫자를 적어주면 됩니다.
여기까지 DATA TYPE에 따른 함수 등을 살펴보았습니다!
Author And Source
이 문제에 관하여(SQL(2) Data Type), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cha-suyeon/SQL2-Data-Type저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)