본문 바로가기

Skillset/SQL24

[Redshift] DBeaver에서 프로시저 만들기 오늘은 Redshift에서 프로시저를 만드는 쿼리문에 대해 소개한다. 프로시저(procedure)란, DB에서 일어나는 일련의 작업을 정리한 절차를 쿼리로 작성하여 관계형 데이터베이스(RDBS) 시스템에 정리한 것을 이야기한다. 그래서 '프로시저를 돌린다' 라는 것은 프로시저를 call 하여 어떤 동작을 일괄적으로 처리하는 것을 의미한다. 굉장히 편리한 기능! 나는 AWS Redshift를 사용하고 있어 이에 따른 프로시저문을 쓰는데, postgresql에도 동일하게 적용되니 참고하자. 또한 DB를 다루는 툴로는 DBeaver를 사용하고 있다. DBeaver에서 프로시저를 만들 때의 절차는 다음과 같다. 1. script에 프로시저문을 입력한 후, 전체선택 (ctrl+A) → alt+X 눌러 프로시저문 .. 2024. 2. 29.
파이썬에서 SQL parameter 설정하기 (Python SQL formatter) 저번 포스팅에서는 파이썬 상에서 AWS Redshift를 연결하여, 직접 Jupyter Notebook 상에서 쿼리를 날리는 방법에 대해 알아보았습니다. (이전 포스팅 바로가기) 그런데 궁금증이 생깁니다. 파이썬에서 쿼리를 날릴 땐 쿼리문에 반드시 따옴표 3개를 써서 주석 처리를 해야 하는데, 그럼 파이썬 상에선 이것이 주석으로 인식됩니다. 하지만 쿼리상에서 어떤 조건을 input으로 즉, 파라미터(parameter)로 넣고자 할 때는 어떻게 해야 할까요? 결론부터 말하자면 format 메서드를 사용해주면 됩니다. 앞의 포스팅에서는 다음의 쿼리를 실행했습니다. 예를 들어, 저는 주간 매출 랭킹 10위 안에 드는 인기 상품만 뽑아보고자 합니다. 상품 테이블은 product에, 매출정보 테이블은 sale_t.. 2022. 9. 20.
[Python, Redshift] 파이썬에 AWS Redshift 연결하여 사용하는 방법 안녕하세요, Everly입니다. 데이터 분석 업무를 하다 보면 쿼리 결과를 파이썬에 불러와서 사용하는 경우가 많이 생기는데요. SQL 상에서 쿼리를 날려 결과를 csv 형태로 뽑아 다시 파이썬에서 불러오는 것보다, 처음부터 파이썬에서 쿼리를 날릴 수 있다면 훨씬 수월하겠죠? 오늘은 그 방법에 대해 포스팅합니다. How to connect python and Redshift 먼저 파이썬 상에서 AWS Redshift와 연결하기 위해 아나콘다 프롬프트에 다음을 입력해 설치해줍니다. pip install redshift_connector 다음으로는 Jupyter Notebook을 열어 AWS 계정 정보를 인증해주면 되는데요, 이를 위해선 여러분의 계정의 host, database, user, password .. 2022. 9. 19.
[MySQL] 문자열에서 0 제거하기 (REPLACE) 오늘 알아볼 함수는 REPLACE이다. REPLACE(문자열, 'A', 'B') 위와 같은 형태로 사용하며, 반드시 '문자'에 대해서만 쓸 수 있다. 문자열 내의 'A'가 있다면 'B'로 바꿔준다. 예를 들어 'APP'에 대해 바꿔준다면 'BPP'로 바뀌는 식이다. 그럼 이를 응용해서, 어떤 문자를 없애주는 것도 가능하다. 'A'를 ''(공백)으로 바꿔주면 'APP' → 'PP'가 된다. 직접 문제를 풀어보며 적용해보자. Q. 사만다는 [EMPLOYEES] 테이블에 있는 직원들의 월평균 임금(Salary)을 계산하려고 한다. (문제 바로가기) Q. 그런데 그녀의 키보드에서 숫자 0 key가 고장나버려서, Salary에 있는 0 값이 모두 사라져버렸다. 예를 들어 누군가의 월급이 550890이었다면, 55.. 2022. 8. 12.
SQL로 깔끔한 문장 출력하기 (CONCAT 활용) SQL을 사용하다 보면 보통은 숫자값을 집계하는 경우가 많은데, SQL의 좋은 점은 문자를 활용해서 깔끔한 형태의 문장을 만들 수도 있다는 점이다. 문제를 바로 풀어보자. (문제 바로가기) 오늘 활용할 테이블 'OCCUPATIONS'이다. 이 테이블의 경우 사람의 이름과, 그 사람의 직업이 적힌 간단한 데이터셋이다. 이 테이블을 활용해 다음과 같은 문장을 만들어보고자 한다. 첫 번째로는 사람 이름 옆에 그 사람의 직업의 이니셜을 괄호로 붙여 출력하고 싶다. 예를 들어, 이름은 'Everly' 이고, 직업은 'Data Scientist'라면 "Everly(D)" 로 출력한다. (단, 순서는 이름 알파벳순으로 한다.) 두 번째로는 각 직업에 해당하는 사람 수가 몇 명인지 세어 문장 형태로 출력하고 싶다. 예.. 2022. 8. 10.
SQL 중첩된 CASE WHEN 구문 활용: 삼각형의 타입 구분하기 Q. 다음과 같은 TRIANGLES 테이블이 있다고 하자. 각 컬럼인 A, B, C는 한 삼각형의 세 변의 길이를 의미한다. 이 정보를 활용하여 해당 삼각형이 어떤 종류의 삼각형인지를 구분하여라. (문제 바로가기) 삼각형의 타입은 다음과 같은 조건으로 나눈다. 삼각형의 세 변의 길이가 모두 동일한 경우: Equilateral 삼각형의 세 변 중 두 변의 길이가 동일한 경우: Isosceles 삼각형의 세 변의 길이가 모두 다른 경우: Scalene ★ 다만 가장 긴 변이 나머지 두 변의 합보다 작다면 그건 삼각형이라고 할 수 없다. (예를 들어 C가 가장 긴 변인데, A와 B의 합이 C보다 작으면 Not A Triangle) 예를 들어 TRIANGLES 테이블의 값이 다음과 같다고 하자. 첫 행은 Iso.. 2022. 8. 9.
SQL 특정 문자들로 시작 or 끝나는 도시 출력하기 보통 특정 문자로 시작하거나 끝나는 경우를 SQL에서 검사하기 위해 LIKE 연산자를 많이 사용한다. 그런데, 특정 문자 1개가 아니라 여러 개를 검사해야 하는 경우는 어떻게 하면 될까? 이와 관련한 문제 3개를 알아보자. ✔Table of Contents 1. 특정 문자들로 시작하는 도시 출력하기 STATION 테이블에서 모음(a, e, i, o, u)으로 시작하는 CITY를 출력하라. CITY의 중복은 포함하지 않는다. 문제 바로가기(클릭) SQL에서 특정 문자로 시작하는 경우엔 LIKE '특정문자%' 를 사용하면 된다. 그런데 이렇게 특정 문자가 여러 개일 때는 어떻게 해야할까? 바로 OR를 사용하면 된다. (참고로 SQL은 대소문자를 구분하지 않으므로 A, E, I, O, U는 대문자로 쓰든 소문.. 2022. 8. 8.
[MySQL] 가장 짧은 글자와 가장 긴 글자에 해당하는 도시 구하기 (LENGTH) 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.. 2022. 8. 7.
[MySQL] RECURSIVE 구문 활용해 배열 생성하기 예제 (feat. 빅쿼리 UNNEST) 프로그래머스의 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의.. 2022. 6. 23.
SQL N번째 순위 추출하기(2번째로 큰 값, 상위 N개, 하위 N개 구하기) SQL로 쿼리를 짤 땐 대부분 '최대', '최소'인 값을 구하는 경우가 많다. 예를 들면 '최다 구매 고객을 추출하라' 거나, '최초의 구매 일자를 추출하라' 같은 것들이다. 그런데 가끔 이런 최대, 최소 값이 아닌 2번째로 큰 값/2번째로 작은 값 등, N번째의 값을 구해야 할 때가 있다. 이런 경우에는 윈도우 함수 중 순위 함수(RANK)를 활용하면 N번째 값을 구할 수 있다. (윈도우 함수가 무엇인지 모르겠다면 아래 포스팅을 참고하세요!) SQL 윈도우 함수 예제 - 순위함수(RANK), 누적 집계함수 오늘은 SQL에서 자주 사용하는 윈도우 함수(Window function)에 대해 포스팅합니다. 윈도우 함수란 행과 행 간의 관계를 정의하며, 윈도우 함수에는 순위함수와 누적 집계함수 2가지가 있습니.. 2022. 6. 14.