kyejin0412 님의 블로그
[TIL] Week 2-5 SQL solvesql 코드카타 / 파이썬 리스트, 튜플, 딕셔너리 본문
드디어 금요일이다~! 오늘은 개인적인 용무가 있기도 했고 집중력이 한계인건지 집중이 잘 되지 않았다.
데이터 리터러시 강의는 주말로 미뤘다...ㅋㅋㅋ 그래도 최소한 파이썬 진도는 나갔다! 앞으로는 계획을 거창하게 세우지 말아야겠다.
코드카타로 solvesql 난이도 2의 못풀었던 문제들을 해결했다. 집계함수와 case 문을 함께 쓸 때는 집계함수를 case문 바깥이 쓸 것!! 이 개념이 잘 안 잡혀있었다. 이 2주동안 많이 성장한 것 같다. 다음주는 본격적으로 join과 파이썬 세션이 시작된다. 파이썬 주차도 눈 깜짝할 새에 끝날 것이기 때문에 항상 현재에 최선을 다해야겠다. 화이팅!!
[코드카타]
1. 집계함수, CASE 함께 사용시 주의점
CASE 문으로 새로운 컬럼을 만들어 집계하고 싶을 때, CASE 문 밖에서 집계해야 한다.
CASE 문 안에서 사용하면 --> 새로운 컬럼별로 집계하지 않고, 한 행을 집계하기 때문에 의도와 다른 값이 되어버린다.
-- solvesql 3년간 들어온 소장품 집계하기
-- 틀린코드 : CASE 문 안에서 집계함수 사용함
SELECT
CASE WHEN A.YEAR = '2014' THEN SUM(A.COUNT) END AS '2014',
CASE WHEN A.YEAR = '2015' THEN SUM(A.COUNT) END AS '2015',
CASE WHEN A.YEAR = '2016' THEN SUM(A.COUNT) END AS '2016'
FROM (...)
GROUP BY A.classification
-- 옳은 코드 : CASE 문 밖에서 집계함수 사용!
SELECT classification,
SUM(CASE WHEN YEAR(acquisition_date) = '2014' THEN 1 ELSE 0 END) AS '2014',
SUM(CASE WHEN YEAR(acquisition_date) = '2015' THEN 1 ELSE 0 END) AS '2015',
SUM(CASE WHEN YEAR(acquisition_date) = '2016' THEN 1 ELSE 0 END) AS '2016'
FROM artworks
GROUP BY classification
ORDER BY classification
2. SELF JOIN, DATE_ADD()
-- solvesql 다음날도 서울숲의 미세먼지 농도는 나쁨
select m1.measured_at as today,
m2.measured_at as next_day,
m1.pm10 as pm10,
m2.pm10 as next_pm10
from measurements m1
join measurements m2 -- 셀프조인
on DATE_ADD(m1.measured_at, INTERVAL 1 DAY) = m2.measured_at
-- 다음 날짜 구하고 싶을 때 +1이 아니라 DATE_ADD(기준날짜, INTERVAL N DAY)를 사용하자!
where m1.pm10 < m2.pm10
3. 대소문자 상관없이 문자열 비교 - UPPER(), LOWER()
upper() 함수를 사용해서 모두 대문자로 바꾸어 비교했다.
모두 소문자로 바꾸는 lower() 함수를 사용해도 된다.
사용법: upper/lower(대상 컬럼) like upper/lower('찾을 문자열')
-- solvesql 기증품 비율 계산하기
SELECT ROUND((sum(CASE WHEN upper(credit) LIKE upper('%gift%') then 1 else 0 end)
/COUNT(1))*100,3) AS ratio
FROM artworks
[파이썬 강의]
1. 리스트
- 하나의 변수에 여러 개의 값을 담을 수 있는 가변한 시퀀스이다. 아주 많이 쓰인다.
- 대괄호 '[ ]'를 사용해서 만들고, 각 값은 콤마(,)로 구분한다.
- 인덱스라는 순서가 중요하다!
- 인덱스
- 0은 맨 앞.
- -1은 맨 마지막. [0, 1, 2, ... , -3, -2, -1]
- 값 추가 : append('값') 맨 끝에 값 추가
- 값 변경 : list1[index] = '변경할 값'
- 슬라이싱 :
쓰는 법 : list[시작 인덱스:내가 원하는 마지막 인덱스+1]
마지막 인덱스를 생략하면 끝까지라는 뜻.
시작 인덱스를 생략하면 처음부터라는 뜻.
ex) list[2:5] : 인덱스 2부터 인덱스 4까지 자른다.
ex) list[-3:] : 뒤에서 3번째부터 끝까지 자른다.
2. 튜플
- 변경할 수 없는 시퀀스 자료형으로, 여러 개의 요소를 저장하는 컨테이너이다.
- 한 번 생성된 후에는 요소를 추가, 삭제, 수정할 수 없다는 점이 리스트와 다른 점이다.
- -> 따라서 데이터를 보호하고 싶을 때 사용한다.
- 소괄호 '( )' 를 사용하거나 생략해서 만들고, 각 값은 콤마(,)로 구분한다.
3. 딕셔너리
- 키-값 쌍의 데이터를 저장하는 자료구조이다.
- 키는 유일해야 하지만 값은 중복될 수 있다. 사전처럼 단어가 있고, 설명이 있는 느낌.
- 중괄호 '{ }' 를 사용해서 만들고, 각 요소는 콤마(,)로 구분한다.
- 판다스로 데이터분석할 때 표로 만들기가 편한 자료구조이다.
- 값 추가/수정: dict['키 이름'] = 값 --> 리스트와 다르게, 인덱스가 아닌 '키'로 접근한다!
- 실전에서는 데이터를 사전처럼 매칭해서 저장하고 싶을 때 많이 쓴다.
참고 링크
https://yeon-dev.tistory.com/135
[DB/SQL] UPPER/LOWER 대소문자 구문 없이 LIKE 사용하기
SQL 문제를 풀다보면 '대소문는 구분하지 않습니다.' 라고 적혀있는 경우가 있습니다. 오늘은 대소문자 구분없이 LIKE를 사용하는 방법을 알아 보겠습니다. UPPER() UPPER()를 사용하면 해당 문자열을
yeon-dev.tistory.com
https://greentea-ds.tistory.com/47
SolveSQL :: 난이도 2 문제풀이
1. 두 테이블 결합하기역대 올림픽 정보 데이터셋은 역대 올림픽 경기와 관련된 데이터가 들어있는 테이블로 이루어져 있습니다. athletes 테이블에는 역대 올림픽 참가 선수의 이름이 들어 있습
greentea-ds.tistory.com
'내일배움캠프-데이터분석' 카테고리의 다른 글
| [TIL] Week 3-2 SQL 라이브세션 - 윈도우 함수, WITH, SUBSTRING_INDEX(), REVERSE(), 날짜 함수 / 파이썬 함수 (0) | 2025.11.04 |
|---|---|
| [TIL] Week 3-1 SQL 라이브세션 - JOIN2 / 파이썬 조건문, 반복문 (0) | 2025.11.03 |
| [TIL] Week 2-4 SQL 라이브세션 - UNION, JOIN1 / 파이썬 데이터 변수와 데이터 타입 / 직무세션 (0) | 2025.10.30 |
| [TIL] Week 2-3 SQL IFNULL(), DATEDIFF() (0) | 2025.10.29 |
| [TIL] Week 2-2 SQL 라이브세션 - 집계함수, group by, 서브쿼리 (1) | 2025.10.28 |