본문 바로가기
Oracle

[Oracle] 테이블에 데이터 Import 후 원하는 정보 추출해보기.(group by)

by moveho 2022. 10. 19.

transaction table

오류로 만들어지지 않았던  transaction table 드디어 오류를 발견해서.. 해결했다

오류의 이유는 외래키 값을 적어 넣을때 books s.. s..s..s.s.s.s.s.s.s.s로 적었어야하는데 book으로만 적었던 문제였다

왜이렇게 발견하기 어려운지.. 나에게 오탈자를 바로 발견해서 알려주는 컴퓨팅 아이즈가 있으면 좋겠다.

 

오라클 데이터 임포트 마법사를 이용

오라클 데이터 임포트 마법사를 이용해 각각의 테이블에 정보를 넣어주도록하겠다!

행 제한 등 자신의 상황에 맞게 옵션을 확인 하며 data 파일을 잘 찾아 넣어주면 끝.

오예

오예 성공~

 

데이터가 잘 들어간 모습

데이터가 잘 들어갔다.

 

이 데이터들을 이용해서  어떤 책이 가장 많이 대여가 됐는지?

그리고 해당연도의 책 장르에 따른 인기 추세가 어떻게 되는지 알아볼수있는 데이터를 만들려고 했다.

아직 코드가 비효율적이지만 개선되면 업데이트 하도록하겠다. (각각의 테이블을 UNION으로 묶은점) 개선필요함.

 

--라이브러리 DB
--년도별 거래수?
select transaction_year, count(*) from transaction group by transaction_year;

-- 가장 많이 대여된 책

select TRANSACTION_YEAR, b.title ,b.GENRE, count(*) from transaction t, books b 
where t.book_id = b.book_id
group by TRANSACTION_YEAR,  b.title, b.GENRE order by count(*) desc;
-----
select distinct TRANSACTION_YEAR "년도 중봅 해제", max(count(b.GENRE)) "장르 카운트" from transaction t, books b 
where t.book_id = b.book_id
group by TRANSACTION_YEAR, b.GENRE order by TRANSACTION_YEAR;


------ 동호 테이블 생성
CREATE TABLE 동호 AS (
select TRANSACTION_YEAR "년도", b.GENRE "장르" , count(*)"장르 카운트" from books b, transaction t
where t.book_id = b.book_id
group by TRANSACTION_YEAR, b.GENRE);
---
--데이터 써ㅓㄱ거ㅣ
--10Y
CREATE TABLE TBL2011 AS (SELECT * FROM 동호 WHERE 년도=2010);
SELECT * FROM TBL2011;
CREATE TABLE A AS (SELECT * FROM TBL2011 WHERE "장르 카운트" = (SELECT MAX("장르 카운트") FROM TBL2011));
SELECT * FROM A;
--11Y
CREATE TABLE TBL_11 AS (SELECT * FROM 동호 WHERE 년도=2011);
SELECT * FROM TBL_11;
CREATE TABLE B AS (SELECT * FROM TBL_11 WHERE "장르 카운트" = (SELECT MAX("장르 카운트") FROM TBL_11));
SELECT * FROM B;
--12Y
CREATE TABLE TBL_12 AS (SELECT * FROM 동호 WHERE 년도=2012);
SELECT * FROM TBL_12;
CREATE TABLE C AS (SELECT * FROM TBL_12 WHERE "장르 카운트" = (SELECT MAX("장르 카운트") FROM TBL_12));
SELECT * FROM C;
--13Y
CREATE TABLE TBL_13 AS (SELECT * FROM 동호 WHERE 년도=2013);
SELECT * FROM TBL_13;
CREATE TABLE D AS (SELECT * FROM TBL_13 WHERE "장르 카운트" = (SELECT MAX("장르 카운트") FROM TBL_13));
SELECT * FROM D;

--14Y
CREATE TABLE TBL_14 AS (SELECT * FROM 동호 WHERE 년도=2014);
SELECT * FROM TBL_14;
CREATE TABLE E AS (SELECT * FROM TBL_14 WHERE "장르 카운트" = (SELECT MAX("장르 카운트") FROM TBL_14));
SELECT * FROM E;

--15Y
CREATE TABLE TBL_15 AS (SELECT * FROM 동호 WHERE 년도=2015);
SELECT * FROM TBL_15;
CREATE TABLE F AS (SELECT * FROM TBL_15 WHERE "장르 카운트" = (SELECT MAX("장르 카운트") FROM TBL_15));
SELECT * FROM F;

--16Y
CREATE TABLE TBL_16 AS (SELECT * FROM 동호 WHERE 년도=2016);
SELECT * FROM TBL_16;
CREATE TABLE G AS (SELECT * FROM TBL_16 WHERE "장르 카운트" = (SELECT MAX("장르 카운트") FROM TBL_16));
SELECT * FROM G;

--17Y
CREATE TABLE TBL_17 AS (SELECT * FROM 동호 WHERE 년도=2017);
SELECT * FROM TBL_17;
CREATE TABLE H AS (SELECT * FROM TBL_17 WHERE "장르 카운트" = (SELECT MAX("장르 카운트") FROM TBL_17));
SELECT * FROM H;

--18Y
CREATE TABLE TBL_18 AS (SELECT * FROM 동호 WHERE 년도=2018);
SELECT * FROM TBL_18;
CREATE TABLE Y AS (SELECT * FROM TBL_18 WHERE "장르 카운트" = (SELECT MAX("장르 카운트") FROM TBL_18));
SELECT * FROM Y;

--19Y
CREATE TABLE TBL_19 AS (SELECT * FROM 동호 WHERE 년도=2019);
SELECT * FROM TBL_19;
CREATE TABLE J AS (SELECT * FROM TBL_19 WHERE "장르 카운트" = (SELECT MAX("장르 카운트") FROM TBL_19));
SELECT * FROM J;

--20Y
CREATE TABLE TBL_20 AS (SELECT * FROM 동호 WHERE 년도=2020);
SELECT * FROM TBL_20;
CREATE TABLE K AS (SELECT * FROM TBL_20 WHERE "장르 카운트" = (SELECT MAX("장르 카운트") FROM TBL_20));
SELECT * FROM K;
--


--컴바인
--SELECT *FROM TABLE1
--UNION
--SELCET *FROM TABLE2;
SELECT * FROM A
UNION
SELECT * FROM B
UNION
SELECT * FROM C
UNION
SELECT * FROM D
UNION
SELECT * FROM E
UNION
SELECT * FROM F
UNION
SELECT * FROM G
UNION
SELECT * FROM H
UNION
SELECT * FROM Y
UNION
SELECT * FROM J
UNION
SELECT * FROM K;
--



select TRANSACTION_YEAR "년도", b.GENRE "장르" , count(*)"장르 카운트" from books b, transaction t
where t.book_id = b.book_id
group by TRANSACTION_YEAR, b.GENRE  order by TRANSACTION_YEAR, count(*) desc;

 

가장 많이 대여가 이용된 책 순서

 

select TRANSACTION_YEAR, b.title ,b.GENRE, count(*) from transaction t, books b 
where t.book_id = b.book_id
group by TRANSACTION_YEAR,  b.title, b.GENRE order by count(*) desc;

대여 연도, 제목, 장르 데이터를 트렌젝션 테이블에서 불러왔다 

책의 장르는 BOOKS 테이블에 위치하여 FROM에 BOOKS도 같이 넣어줬다.

대여연도, 제목, 장르로 그룹화 시켜 데이터를 조회했다.

 

여기서 잠깐 !! GROUP BY를 쉽게 이해할수 있도록 설명!!

 

이런 테이블이 있다고 생각하면 이 표는 장르로 GROUP BY 시켜 장르별 ADVENTURE , FANTASY, ROMANCE 세가지 장르로 그룹바이 시켜 필요한 데이터만을 추출하였다.

더욱 보기 쉽고 간결하다!

 

 

노가다

원래 생각한 궁금증인 각각 연도에 해당하는 어떤 장르가 가장 많이 대여 되었는지 알기 위해 각각 연도에 해당하는 데이터를 각각 테이블에 만들어 UNION을 이용해 붙여넣었다

 

노가다의 결과

이렇게 2010년에는 에세이와 학습서 각각 5권 2011년엔 학습서 12년엔 에세이 13년에 소설 ... 이하 생략

이렇게 정보를 얻을수 있었다.

 

마지막으로 이렇게 각각 연도에 가장 인기있었던 장르와 얼마나 대여됐는지 순서대로 볼 수 있는 데이터를 추출하였다.

데이터를 원하는대로 추출하여 활용할수 있다는것이  SQL의 큰 장점인것 같다.

만약 방대한 데이터로 원하는 자료를 이렇게 조회하고 도식화 시킬 수 있다는 것은 정말 엄청난 힘을 지닌것 같다.

 

댓글