목록Programming Skill/SQL (18)
Data Blog
1. 세로로 데이터 결합 UNION ALL 연산자를 이용해 여러 개의 테이블을 세로로 결합할 수 있다는 점은 이미 많이 언급했으므로 잘 알고 있을 것이라 생각한다. (추가로 말씀드리자면, 중복을 제외한 결과를 얻을 수 있는 UNION은 UNIONALL에 비해 거의 사용되지 않는다!) 여러 번 언급했듯이, '합쳐지는 SELECT문의 열의 숫자는 반드시 동일해야' 한다. 만약 아래 테이블처럼 칼럼이 완전히 일치하지 않는다면, 해당 칼럼은 SELECT 구문에서 제외해야 한다.SELECT 'app1' AS app_name -- 테이블 식별 col (문자 app1 출력) , id , name , emailFROM app1_usersUNION ALL SELECT 'app2' AS app_name -..
1. CROSS JOIN Cross Join(Cartesian Product, 곱집합)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다. 이때, 두 테이블의 각 행의 개수를 곱한 수만큼 조인 결과의 전체 행 개수가 생성된다.SELECT *FROM city AS c CROSS JOIN transport AS t;SELECT *FROM city AS c JOIN transport AS t;SELECT *FROM city AS c , transport AS t; 2. 열→행 변환 행 단위로 저장된 '세로 기반' 데이터를 열과 쉼표로 구분된 문자열 등의 '가로 기반'으로 변환하는 과정은 앞선 포스팅에서 알아보았다. 이번에는 가로 기반 데이터를 세로 기반으로 변환하는 ..
1. 카테고리별 상위 n개 추출 ORDER BY 절과 LIMIT 함수를 조합하면 전체 데이터에서 상위 10개에 해당하는 데이터를 추출할 수 있었다. 하지만 전체 데이터가 아닌 각 카테고리별로 상위 n개 데이터를 추출하려면 순위 함수와 PARTITION BY를 활용해야 한다. Window Function은 WHERE 절에서 사용할 수 없으므로, 이를 위한 서브 쿼리를 사용하는 것이 필요하다.SELECT *FROM (SELECT category , product_id , score , ROW_NUMBER() OVER(PARTITION BY category ORDER BY score DESC) AS `row` FROM products ) AS ..
1. 집약 전 + 집약 함수 동시에 다루기 (by Window Function) Window Function을 사용하면 원래 테이블의 값과 집계 함수의 결괏값을 쉽고 효율적으로 조합할 수 있다. 즉, 테이블 전체의 평균값과 user_id별 평균값을 하나의 score 테이블에 동시에 표현할 수 있다. 집계 함수 뒤에 OVER 구문을 붙이고, 여기에 윈도 함수를 지정하면 집계 함수를 윈도 함수로 사용할 수 있다는 점을 기억하자.OVER( ) : 매개 변수를 지정하지 않으면 테이블 전체에 집계 함수를 적용OVER(PARTITION BY ) : 해당 칼럼 값을 기준으로 그룹화한 후 집계 함수를 적용 SELECT user_id , product_id -- 개별 score , score --..
1. 주석 처리 코드를 작성하면서 여러 가지 방법을 시도해 보고 싶을 때가 정말 많다.그럴 때마다 이전 코드를 복사해서 메모장에 옮기고 새로운 코드를 실행하던 과거의 나, 왜 그랬을까??그냥 주석 처리하면 된다! 2. 데이터 조작 DML (Data Manipulation Language) 'SELECT 열 이름 FROM 테이블 WHERE 조건'은 주어진 데이터에서 원하는 정보를 추출할 수 있는 방법이라면 데이터를 직접 삽입, 수정, 삭제하여 데이터 자체를 조작하는 방법도 있다. case 1) INSERT데이터 삽입 시 열 이름을 지정하면, 삽입하는 열의 순서가 바뀌어도 열 이름과 입력된 값이 대응하기 때문에 결과에 영향을 미치지 않는다. 여기서 주의할 점은 데이터 타입이 숫자일지라도 데이터를 삽입할 ..
1. DATE_ADD 함수 DATE_ADD 함수를 이용해 날짜와 시간을 계산해 보자.먼저, DATE_ADD 함수를 사용하려면 데이터의 타입이 날짜형 데이터 타입이어야 한다.하지만 겉보기에는 날짜형처럼 보이지만 실제로 데이터 타입이 VARCHAR인 경우는 어떻게 해야 할까? 이때는 CAST 함수를 이용해 데이터 타입을 날짜형 데이터 타입으로 변환해야 한다. 날짜형 데이터 타입은 다음과 같다.DATETIME : 날짜와 시간을 저장하는 데이터 타입 (예: 2022-10-01 18:25:30)DATE : 날짜를 저장하는 데이터 타입 (예: 2022-10-01)TIME : 시간을 저장하는 데이터 타입 (예: 18:25:30)SELECT user_id , CAST(register_stamp AS datetim..
1. 매출 증감 1분기(q1)보다 2분기(q2) 매출이 올랐는지 내렸는지 알아보기 위해 CASE문을 이용해 증가(+), 감소(-), 동일( )을 나타낼 수도 있지만 SIGN 함수를 이용해서도 증감을 나타낼 수 있다.SIGN(x) : x가 양수일 경우 1을 반환SIGN(x) : x가 음수일 경우 -1을 반환SIGN(x) : x가 0일 경우 0을 반환SELECT year , q1 , q2 , CASE WHEN q1 q2 THEN '-' ELSE '' END AS judge_q1_q2 , q2 - q1 AS diff_q2_q1 , SIGN(q2 - q1) AS sign_q2_q1 FROM quarterly; 2. CTR (Click Through Rate) CT..
1. 날짜/시각에서 특정 필드 추출 방법 1) DATETIME형이전에 코딩 테스트 문제를 통해 데이터의 타입이 datetime 일 때 DATE_FORMAT 함수를 사용하여 년, 월, 일을 추출하는 방법에 대해 알아보았다. DATE_FORMAT 함수 외에도 EXTRACT 함수를 사용하여 특정 필드 값인 년, 월, 일 등을 추출할 수 있다.SELECT stamp , EXTRACT(YEAR FROM stamp) AS year -- 년 , EXTRACT(MONTH FROM stamp) AS month -- 월 , EXTRACT(DAY FROM stamp) AS day -- 일 , EXTRACT(HOUR FROM stamp) AS hour -- 시간FROM (SELECT CAST('2024..