파이썬에서 SQL parameter 설정하기 (Python SQL formatter)
·
Skillset/SQL
저번 포스팅에서는 파이썬 상에서 AWS Redshift를 연결하여, 직접 Jupyter Notebook 상에서 쿼리를 날리는 방법에 대해 알아보았습니다. (이전 포스팅 바로가기) 그런데 궁금증이 생깁니다. 파이썬에서 쿼리를 날릴 땐 쿼리문에 반드시 따옴표 3개를 써서 주석 처리를 해야 하는데, 그럼 파이썬 상에선 이것이 주석으로 인식됩니다. 하지만 쿼리상에서 어떤 조건을 input으로 즉, 파라미터(parameter)로 넣고자 할 때는 어떻게 해야 할까요? 결론부터 말하자면 format 메서드를 사용해주면 됩니다. 앞의 포스팅에서는 다음의 쿼리를 실행했습니다. 예를 들어, 저는 주간 매출 랭킹 10위 안에 드는 인기 상품만 뽑아보고자 합니다. 상품 테이블은 product에, 매출정보 테이블은 sale_t..
[Python, Redshift] 파이썬에 AWS Redshift 연결하여 사용하는 방법
·
Skillset/SQL
안녕하세요, Everly입니다. 데이터 분석 업무를 하다 보면 쿼리 결과를 파이썬에 불러와서 사용하는 경우가 많이 생기는데요. SQL 상에서 쿼리를 날려 결과를 csv 형태로 뽑아 다시 파이썬에서 불러오는 것보다, 처음부터 파이썬에서 쿼리를 날릴 수 있다면 훨씬 수월하겠죠? 오늘은 그 방법에 대해 포스팅합니다. How to connect python and Redshift 먼저 파이썬 상에서 AWS Redshift와 연결하기 위해 아나콘다 프롬프트에 다음을 입력해 설치해줍니다. pip install redshift_connector 다음으로는 Jupyter Notebook을 열어 AWS 계정 정보를 인증해주면 되는데요, 이를 위해선 여러분의 계정의 host, database, user, password ..
[MySQL] 문자열에서 0 제거하기 (REPLACE)
·
Skillset/SQL
오늘 알아볼 함수는 REPLACE이다. REPLACE(문자열, 'A', 'B') 위와 같은 형태로 사용하며, 반드시 '문자'에 대해서만 쓸 수 있다. 문자열 내의 'A'가 있다면 'B'로 바꿔준다. 예를 들어 'APP'에 대해 바꿔준다면 'BPP'로 바뀌는 식이다. 그럼 이를 응용해서, 어떤 문자를 없애주는 것도 가능하다. 'A'를 ''(공백)으로 바꿔주면 'APP' → 'PP'가 된다. 직접 문제를 풀어보며 적용해보자. Q. 사만다는 [EMPLOYEES] 테이블에 있는 직원들의 월평균 임금(Salary)을 계산하려고 한다. (문제 바로가기) Q. 그런데 그녀의 키보드에서 숫자 0 key가 고장나버려서, Salary에 있는 0 값이 모두 사라져버렸다. 예를 들어 누군가의 월급이 550890이었다면, 55..
SQL로 깔끔한 문장 출력하기 (CONCAT 활용)
·
Skillset/SQL
SQL을 사용하다 보면 보통은 숫자값을 집계하는 경우가 많은데, SQL의 좋은 점은 문자를 활용해서 깔끔한 형태의 문장을 만들 수도 있다는 점이다. 문제를 바로 풀어보자. (문제 바로가기) 오늘 활용할 테이블 'OCCUPATIONS'이다. 이 테이블의 경우 사람의 이름과, 그 사람의 직업이 적힌 간단한 데이터셋이다. 이 테이블을 활용해 다음과 같은 문장을 만들어보고자 한다. 첫 번째로는 사람 이름 옆에 그 사람의 직업의 이니셜을 괄호로 붙여 출력하고 싶다. 예를 들어, 이름은 'Everly' 이고, 직업은 'Data Scientist'라면 "Everly(D)" 로 출력한다. (단, 순서는 이름 알파벳순으로 한다.) 두 번째로는 각 직업에 해당하는 사람 수가 몇 명인지 세어 문장 형태로 출력하고 싶다. 예..
SQL 중첩된 CASE WHEN 구문 활용: 삼각형의 타입 구분하기
·
Skillset/SQL
Q. 다음과 같은 TRIANGLES 테이블이 있다고 하자. 각 컬럼인 A, B, C는 한 삼각형의 세 변의 길이를 의미한다. 이 정보를 활용하여 해당 삼각형이 어떤 종류의 삼각형인지를 구분하여라. (문제 바로가기) 삼각형의 타입은 다음과 같은 조건으로 나눈다. 삼각형의 세 변의 길이가 모두 동일한 경우: Equilateral 삼각형의 세 변 중 두 변의 길이가 동일한 경우: Isosceles 삼각형의 세 변의 길이가 모두 다른 경우: Scalene ★ 다만 가장 긴 변이 나머지 두 변의 합보다 작다면 그건 삼각형이라고 할 수 없다. (예를 들어 C가 가장 긴 변인데, A와 B의 합이 C보다 작으면 Not A Triangle) 예를 들어 TRIANGLES 테이블의 값이 다음과 같다고 하자. 첫 행은 Iso..
[MySQL] 가장 짧은 글자와 가장 긴 글자에 해당하는 도시 구하기 (LENGTH)
·
Skillset/SQL
HackerRank의 SQL 문제를 풀다가 흥미로운 문제를 발견해서 포스팅한다. (문제 바로가기) Query the two cities in STATION with the shortest and longest CITY names, as well as their respective lengths (i.e.: number of characters in the name). If there is more than one smallest or largest city, choose the one that comes first when ordered alphabetically. 번역하면, STATION 이라는 테이블의 가장 짧은 이름의 CITY와, 가장 긴 이름의 CITY를 구하라는 문제이다. 주의할 점은 혹시 CI..
[MySQL] RECURSIVE 구문 활용해 배열 생성하기 예제 (feat. 빅쿼리 UNNEST)
·
Skillset/SQL
프로그래머스의 SQL 코테를 풀다가 다음과 같은 문제가 나왔다. 먼저 데이터 'ANIMAL_OUTS'를 보면, SELECT * FROM ANIMAL_OUTS LIMIT 10; 이러한 데이터에서, 시간대별 입양 건수를 조회하라는 문제였다. 즉, DATETIME 열의 HOUR 값에 따라 ANIMAL_ID를 카운트하면 되는데, 이게 그냥 GROUP BY를 사용하면 문제가 있었다. SELECT HOUR(DATETIME), COUNT(ANIMAL_ID) FROM ANIMAL_OUTS GROUP BY 1 ORDER BY 1 위와 같이 시간대별 입양 건수가 있는 결과만 뽑혀나오는 문제가 생겼다. 하지만 이 문제의 경우 왼쪽 사진과 같이 COUNT값이 0이어도 값이 0으로 나와야 했는데, 그냥 집계함수를 사용하면 0의..
SQL N번째 순위 추출하기(2번째로 큰 값, 상위 N개, 하위 N개 구하기)
·
Skillset/SQL
SQL로 쿼리를 짤 땐 대부분 '최대', '최소'인 값을 구하는 경우가 많다. 예를 들면 '최다 구매 고객을 추출하라' 거나, '최초의 구매 일자를 추출하라' 같은 것들이다. 그런데 가끔 이런 최대, 최소 값이 아닌 2번째로 큰 값/2번째로 작은 값 등, N번째의 값을 구해야 할 때가 있다. 이런 경우에는 윈도우 함수 중 순위 함수(RANK)를 활용하면 N번째 값을 구할 수 있다. (윈도우 함수가 무엇인지 모르겠다면 아래 포스팅을 참고하세요!) SQL 윈도우 함수 예제 - 순위함수(RANK), 누적 집계함수 오늘은 SQL에서 자주 사용하는 윈도우 함수(Window function)에 대해 포스팅합니다. 윈도우 함수란 행과 행 간의 관계를 정의하며, 윈도우 함수에는 순위함수와 누적 집계함수 2가지가 있습니..
[MS-SQL] 항목별 비율값 집계하기 (CAST, ROUND, CASE WHEN 구문)
·
Skillset/SQL
SQL에서는 GROUP BY와 집계함수를 활용해 어떤 항목 값의 개수, 합계, 최댓값, 최솟값 등등을 쉽계 집계할 수 있습니다. 하지만 비율을 구하려면 조금의 쿼리 수정이 필요한데요! 이를 어떻게 하는지 바로 알아보겠습니다. --조회 SELECT * FROM [RFM_BASE_SEG2] 오늘 사용할 테이블은 [RFM_BASE_SEG2] 입니다. 위의 테이블을 보면, 고객별 구매한 횟수(ord_cnt 열), 구매한 총 금액(tot_amt 열), 그리고 고객별 등급(seg)이 나와 있는데요! 각 고객별 값이 아니라, 각 등급별(seg)로 집계를 해보려고 합니다. | Q. 등급별(seg별) 고객 수 및 매출 비중을 파악하시오. SELECT seg, COUNT(mem_no) AS seg_cnt, SUM(tot_..
SQL 효율화 및 자동화 명령어 - VIEW & PROCEDURE
·
Skillset/SQL
오늘은 SQL을 아주 유용하게 활용할 수 있는, 효율화 & 자동화를 할 수 있는 명령어에 대해 정리한다. 바로 VIEW(뷰)와 PROCEDURE(프로시저)로, 둘 다 자주 사용하는 SQL 명령어를 저장하는 역할을 한다. VIEW는 SQL 연산을 하여 만든 테이블을 새로운 가상 테이블로 저장하고, PROCEDURE는 '매개변수' 기능을 활용해 자동화한다. 별로 어렵지 않으니 명령어를 익혀서 편리하게 쿼리를 짜보자 😀 ✔Table of Contents 1. VIEW : 새로운 가상 테이블로 저장하기 생성: CREATE VIEW [TABLE명] AS ~ 조회: 일반 테이블 조회와 같음 수정: ALTER VIEW [TABLE명] AS ~ 삭제: DROP VIEW [TABLE명] 오늘의 예제는 이 테이블이다. 다..
Everly.
'SQL' 태그의 글 목록