본문 바로가기
📂 데이터베이스/◾ RDBMS

[DB] Kaggle에서 CSV 파일 가져와 SQL 기본 문법 연습하기 3(WHERE, ORDER BY, GROUP BY, HAVING, DISTINCT, COUNT, SUM, AS, NOT, LIMIT)

by 이 정규 2023. 5. 24.
728x90
반응형

Kaggle에서 CSV 파일 가져와 SQL 기본 문법 연습하기 3

이전 학습 내용 ( 1 - 2)

2023.05.22 - [데이터베이스] - [DB] MySQL, DBeaver 설치 및 SQL 기본 문법 1(CREATE, DROP, USE, INSERT INTO, SELECT FROM, WHERE, AND, OR, IN, LIKE)

 

[DB] MySQL, DBeaver 설치 및 SQL 기본 문법 1(CREATE, DROP, USE, INSERT INTO, SELECT FROM, WHERE, AND, OR, IN, LIKE)

MySQL, DBeaver 설치 및 SQL 기본 문법 1 관련 게시글 2023.05.22 - [분류 전체보기] - [DB] MySQL, DBeaver 설치 및 SQL 기본 문법 2(CREATE, DROP, USE, INSERT INTO, SELECT FROM, WHERE, AND, OR, IN, LIKE) [DB] MySQL, DBeaver 설치 및 SQL

zzgrworkspace.tistory.com

2023.05.22 - [데이터베이스] - [DB] MySQL, DBeaver 설치 및 SQL 기본 문법 2(CREATE, DROP, USE, INSERT INTO, SELECT FROM, WHERE, AND, OR, IN, LIKE)

 

[DB] MySQL, DBeaver 설치 및 SQL 기본 문법 2(CREATE, DROP, USE, INSERT INTO, SELECT FROM, WHERE, AND, OR, IN, LIKE)

MySQL, DBeaver 설치 및 SQL 기본 문법 2 2023.05.22 - [DB] - [DB] MySQL, DBeaver 설치 및 SQL 기본 문법 1(CREATE, DROP, USE, INSERT INTO, SELECT FROM, WHERE, AND, OR, IN, LIKE) [DB] MySQL, DBeaver 설치 및 SQL 기본 문법 1(CREATE, DROP, USE

zzgrworkspace.tistory.com

데이터 출처

Austin Animal Center Shelter Intakes and Outcomes

 

Austin Animal Center Shelter Intakes and Outcomes

80,000 Shelter Animal Intakes and Resulting Outcomes

www.kaggle.com


지난 번에는 Mac M1 터미널에서 MySQL을 설치한 뒤 계정을 만들고 DBeaver를 설치한 뒤 아주 간단한 SQL 기본 문법들을 예제를 통해 배워보았다. 확실히 한 번 해본 걸 다시 하면 가속도가 금방 붙어 재미가 있다. 혼공 SQL이라는 유튜브를 따라하고 있었는데, 아무래도 여러모로 작업 환경이 달라서 불편했다. 그래서 이전에 언급했던 감자님이 공부했던 내용을 가지고 훑는 느낌으로 공부해보려고 한다. 

Workbench에서 DBeaver로 넘어오고 약간의 적응기간이 필요했는데, 이제 좀 익숙해져간다. 그리고 Workbench의 돌고래 심플하니 멋지다고 생각했는데, DBeaver 비버가 좀 더 귀엽다는 점에서 가산점(?)이 있다. 잡설은 여기까지 하고 공부한 내용을 함께 보도록 하자.

1. DBeaver에 CSV 파일 가져오기

개인적으로 가장 골치아팠다. 2시간 정도 헤맸는데, 그 이유는 명령어로 데이터를 가져오려고 했으나 알 수 없는 에러가 뜨며 날 가로막았다. 그래서 여러 블로그 선생님들의 도움을 받아 간접적으로 해결했다. 우선 내가 겪은 에러는 바로 이것이다.

-- LOAD DATA LOCAL INFILE문
LOAD DATA LOCAL INFILE '/Users/zzgr/Downloads/aac_intakes'
INTO TABLE aac
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'

-- 이거 쓰면 해결된다고 했는데 씨알도 안먹힘
set global local_infile=1;
ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides

4885도 아니고 자꾸만 날 찾아오는 3948 차주의 에러 폭격에 마음이 무너져갈 즈음... DBeaver 도구 중 하나로 데이터 가져오기가 있다는 사실을 알게 됐다.

오오! 해치웠나?

기쁜 마음에 바로 market 데이터베이스 > 우클릭 > 데이터 가져오기 > 데이터 선택하고 > 다음 * 5 을 진행했다.

궁극의 클리셰 해치웠나...

어림도 없이 새로이 오신 1406 차주분이 반겨주셨다. 이건 또 무언고 하며 2시간 정도 보내던 찰나 데이터가 테이블 형태인데 데이터베이스에다가 만들고 있던 멍청한 주인장임을 깨닫게 됐다. Tables에서 우클릭 해서 데이터 가져오기를 하면 정상적으로 데이터가 가져와진다.

끼얏호! aac_intakes 데이터를 잘 가져온 걸 확인할 수 있다.

2. 연습 문제 만들어 기본 문법 연습하기

2.1. 동물 보호소에 들어온 모든 동물의 정보를 animal_id 오름차순으로 조회하기
조회 대상 : animal_id, animal_type, datatime, intake_condition, name, sex_upon_intake

SELECT animal_id, animal_type, datetime, intake_condition, name, sex_upon_intake
FROM aac_intakes
ORDER BY animal_id ASC ;

2.1. 문제 조회 결과


2.2. 동물 보호소에 들어온 동물 중 intake_condition이 sick인 동물의 데이터를 animal_id의 오름차순으로 조회하기
조회 대상 : animal_id, intake_condtion, name

GROUP BY - HAVING 사용 (X)

-- SELECT animal_id, intake_condition, name
-- FROM aac_intakes
-- GROUP BY intake_condition HAVING 'sick'
-- ORDER BY animal_id ASC ;

묶을 내용도 없는데 신나서 GROUP BY - 써버린 사람... 저요.

WHERE 사용 (O)

SELECT animal_id, intake_condition, name
FROM aac_intakes
WHERE intake_condition = 'sick'
ORDER BY animal_id ASC ;

2.2. 문제 조회 결과

2.3. 동물 보호소에 들어온 동물 중 intake_condition이 aged 아닌 동물들의 정보를 animal_id 오름차순으로 조회하기
조회 대상 : animal_id, intake_condition, name

SELECT animal_id, intake_condition, name
FROM aac_intakes
WHERE intake_condition != 'aged' -- !=, <>, NOT -
ORDER BY animal_id ASC ;

2.3. 문제 조회 결과

2.4. 동물 보호소에 들어온 모든 동물의 데이터를 이름의 내림차순으로 조회하기
단, 이름이 같은 동물 중에서는 최근 보호를 시작한 동물 먼저 조회
조회 대상 : animal_id, datetime, name

SELECT animal_id, datetime, name
FROM aac_intakes
ORDER BY name DESC, datetime DESC ;

2.4. 문제 조회 결과

2.5. 동물 보호소에 가장 먼저 들어온 동물의 데이터 조회하기
조회 대상 : name, datetime

SELECT name, datetime
FROM aac_intakes
ORDER BY datetime ASC
LIMIT 1 ;

2.5. 문제 조회 결과

2.6. 동물 보호소에 들어온 동물의 이름이 총 몇 종류 있는지 조회하기
단, 이름이 빈칸인 경우에는 집계하지 않음

SELECT COUNT(DISTINCT name)
FROM aac_intakes
WHERE NOT name = '' ;
2.6. 문제 조회 결과

2.7. 동물 보호소에 들어온 동물 종(animal_type)별로 각각 몇 마리인지 조회하기
단, 고양이가 개보다 먼저 등장하도록 정렬
조회 대상 : animal_type, cnt

SELECT animal_type, count(*) AS cnt
FROM aac_intakes
GROUP BY animal_type
ORDER BY animal_type ASC ;

2.7. 문제 조회 결과

2.8. 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하기
단, 이름이 ''인 동물은 집계에서 제외하고 이름을 오름차순으로 조회
조회 대상 열 : name, cnt

-- SELECT name, count(*) AS cnt
-- FROM aac_intakes
-- WHERE NOT name = ''
-- GROUP BY name 
-- HAVING cnt >= 2
-- ORDER BY name ASC ;

문제대로&nbsp;풀었는데,&nbsp;이름에&nbsp;*이&nbsp;붙어서&nbsp;조회됐다.

SELECT name, count(*) AS cnt
FROM aac_intakes
WHERE NOT name = '' AND name NOT LIKE '*%' -- *로 시작하는 이름 제외 
GROUP BY name 
HAVING cnt >= 2
ORDER BY name ASC ;

 

2.8. 문제 조회 결과


오늘은 Kaggle에서 AAC 데이터를 CSV 형태로 다운받아 작업 환경(DBeaver)로 데이터를 가져와 이것저것 해보았다. 다음 포스팅에서는 JOIN을 주로 연습해보려고 한다. 오늘도 긴 글 읽어주셔서 감사드리고 좋은 저녁 보내시길 바란다. 꾸벅 -

 

728x90
반응형

댓글