데이터를 자유자재로 다룰 수 있고 정리할 수 있다.
리스트는 파이썬에서 가장 자주 사용되는 데이터 구조 중 하나로, 가변(mutable)한 시퀀스(sequence) 구조를 가진다. 즉, 리스트 내부의 값을 변경할 수 있다.
[ ]
를 사용하여 생성,
로 구분-1
은 마지막 요소)# 리스트 생성
numbers = [1, 2, 3, 4, 5]
# 첫 번째 요소에 접근하기
print(numbers[0]) # 출력: 1
# 마지막 요소에 접근하기
print(numbers[-1]) # 출력: 5
메서드 | 설명 |
---|---|
append(x) | 리스트에 항목 x 추가 |
extend(iterable) | 리스트에 또 다른 리스트의 항목 추가 |
insert(i, x) | 리스트의 특정 위치 i 에 항목 x 삽입 |
pop(i) | 리스트에서 특정 위치 i 의 값을 제거하고 반환 |
index(x) | 리스트에서 특정 값 x 의 인덱스를 찾음 |
count(x) | 리스트에서 특정 값 x 의 개수를 셈 |
sort() | 리스트의 항목들을 정렬 |
reverse() | 리스트의 항목들을 역순으로 변경 |
# 리스트 생성
my_list = [1, 2, 3, 4, 5]
# 값 추가
my_list.append(6) # [1, 2, 3, 4, 5, 6]
my_list.extend([7, 8, 9]) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
my_list.insert(2, 10) # [1, 2, 10, 3, 4, 5, 6, 7, 8, 9]
# 값 삭제
my_list.remove(3) # 값 3 삭제
popped_value = my_list.pop(5) # 다섯 번째 위치 값 제거 후 반환
print(popped_value) # 출력: 6
# 리스트 정렬
my_list.sort() # [1, 2, 4, 5, 7, 8, 9, 10]
my_list.reverse() # [10, 9, 8, 7, 5, 4, 2, 1]
리스트에서 특정 값을 삭제하거나 전체를 삭제하는 방법
# 리스트 항목 삭제
del my_list[0] # 첫 번째 항목 삭제
print(my_list)
# 리스트 전체 삭제
my_list.clear()
print(my_list) # 출력: []
각 문제의 쿼리문과 설명을 포함하여 기록한다.
users
및 payment
테이블 활용사용자는 users
테이블과 payment
테이블을 활용하여 다양한 SQL 문제를 풀이하였다.
-- 특정 기간 동안 결제한 유저들의 평균 결제 금액
SELECT user_id, ROUND(AVG(amount), 2) AS avg_payment
FROM payment
WHERE approval_date BETWEEN '2024-01-01' AND '2024-12-31'
GROUP BY user_id
HAVING AVG(amount) > 1000;
설명:
approval_date
기준) 결제한 유저들의 평균 결제 금액을 구함HAVING
절을 활용하여 평균 결제 금액이 1000 이상인 유저만 출력-- 게임 계정별 첫 로그인 날짜 구하기
SELECT account_id, MIN(first_login_date) AS first_login
FROM users
GROUP BY account_id;
설명:
account_id
) 별로 최초 로그인 날짜(first_login_date
)를 구함MIN()
함수를 사용하여 첫 로그인 날짜를 찾음-- 가장 많이 결제한 유저 찾기
SELECT user_id, SUM(amount) AS total_spent
FROM payment
GROUP BY user_id
ORDER BY total_spent DESC
LIMIT 1;
설명:
SUM(amount)
를 이용해 유저별 총 결제 금액을 구함ORDER BY total_spent DESC
로 정렬하여 가장 많이 결제한 유저를 찾음LIMIT 1
을 사용하여 상위 1명만 출력이처럼 리스트, 튜플, 딕셔너리 등의 데이터 구조를 이해하고 활용하면, 데이터 분석 및 SQL에서도 효율적으로 데이터를 다룰 수 있다. 앞으로도 다양한 문제를 통해 SQL 실력을 쌓아 나가자!
REST_INFO
와 REST_REVIEW
테이블에서 서울에 위치한 식당 목록을 조회.SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS, ROUND(AVG(R.REVIEW_SCORE),2) SCORE
FROM REST_INFO I
INNER JOIN REST_REVIEW R ON I.REST_ID = R.REST_ID
WHERE I.ADDRESS LIKE '서울%'
GROUP BY I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS
ORDER BY SCORE DESC, I.FAVORITES DESC;
INNER JOIN
을 사용하여 REST_INFO
와 REST_REVIEW
테이블을 REST_ID
기준으로 조인한다.WHERE I.ADDRESS LIKE '서울%'
을 사용하여 서울에 위치한 식당을 필터링한다.AVG(R.REVIEW_SCORE)
를 사용하여 식당별 평균 리뷰 점수를 계산하고, ROUND(AVG(R.REVIEW_SCORE),2)
를 사용하여 소수점 둘째 자리에서 반올림한다.GROUP BY
를 사용하여 REST_ID
기준으로 그룹화한다.ORDER BY SCORE DESC, I.FAVORITES DESC
를 사용하여 평균 점수 기준 내림차순 정렬, 같다면 즐겨찾기 수 기준 내림차순 정렬한다.CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블에서 2022년 9월에 대여 시작한 기록 조회.SELECT HISTORY_ID,
CAR_ID,
DATE_FORMAT(START_DATE,'%Y-%m-%d') START_DATE,
DATE_FORMAT(END_DATE, '%Y-%m-%d') END_DATE,
CASE WHEN DATEDIFF(END_DATE, START_DATE) >= 29 THEN '장기 대여'
ELSE '단기 대여' END RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC;
WHERE START_DATE LIKE '2022-09%'
을 사용하여 9월에 대여 시작한 기록만 조회한다.DATEDIFF(END_DATE, START_DATE)
를 사용하여 대여 기간을 계산한다.CASE WHEN
을 사용하여 30일 이상이면 ‘장기 대여’, 그렇지 않으면 ‘단기 대여’로 분류한다.ORDER BY HISTORY_ID DESC
를 사용하여 대여 기록 ID 기준 내림차순 정렬한다.CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블에서 자동차별 평균 대여 기간을 구한다.SELECT CAR_ID,
ROUND(AVG(DATEDIFF(END_DATE, START_DATE) + 1), 1) AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
DATEDIFF(END_DATE, START_DATE) + 1
을 사용하여 대여 시작일을 포함하여 대여 기간을 계산한다.AVG()
를 사용하여 자동차별 평균 대여 기간을 구한다.ROUND(AVG(...), 1)
을 사용하여 소수점 첫째 자리에서 반올림한다.HAVING AVERAGE_DURATION >= 7
을 사용하여 7일 이상인 자동차만 필터링한다.ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
을 사용하여 평균 대여 기간 기준 내림차순 정렬, 같다면 자동차 ID 기준 내림차순 정렬한다.PLACES
테이블에서 공간을 2개 이상 등록한 사용자(헤비 유저)의 공간 정보를 조회.SELECT ID, NAME, HOST_ID
FROM PLACES
WHERE HOST_ID IN (
SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(ID) >= 2
)
ORDER BY ID;
HAVING COUNT(ID) >= 2
을 사용하여 2개 이상 공간을 등록한 사용자만 선택한다.WHERE HOST_ID IN (...)
을 사용하여 헤비 유저가 등록한 공간만 조회한다.ORDER BY ID
를 사용하여 공간 ID 기준 오름차순 정렬한다.CART_PRODUCTS
테이블에서 Milk와 Yogurt가 모두 포함된 장바구니 ID 조회.SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('Milk', 'Yogurt')
GROUP BY CART_ID
HAVING COUNT(DISTINCT NAME) = 2
ORDER BY CART_ID;
WHERE NAME IN ('Milk', 'Yogurt')
을 사용하여 Milk 또는 Yogurt가 포함된 데이터만 필터링한다.GROUP BY CART_ID
를 사용하여 장바구니별로 묶는다.HAVING COUNT(DISTINCT NAME) = 2
을 사용하여 Milk와 Yogurt가 둘 다 포함된 경우만 선택한다.ORDER BY CART_ID
를 사용하여 장바구니 ID 기준 오름차순 정렬한다.오늘 학습한 SQL을 통해 다양한 필터링 및 집계 기법을 활용할 수 있었다.
.