목록Programming Skill (52)
Data Blog
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..
📢 본 포스팅에서 사용되는 자료와 출처는 HackerRank 임을 밝힙니다. https://www.hackerrank.com/challenges/weather-observation-station-15/problem?isFullScreen=true 해당 문제를 요약하면 다음과 같다.1. lat_n이 137.2345보다 작은 값 중 최댓값을 가지는 long_w를 조희2. 결과는 소수 넷째 자리까지 표시 방법 1) 서브쿼리WHERE 절에 137.2345보다 작은 lat_n이라는 조건을 설정하고, SELECT 문에 MAX 함수를 사용하여 조건에 맞는 lat_n을 추출한 후, 그 값과 일치하는 long_w를 구하는 서브쿼리 문제이다. 서브쿼리는 크게 다음 두 가지로 나눌 수 있다.WHERE 조건절의 서브쿼리: ..
📢 본 포스팅에서 사용되는 자료와 출처는 Programmers 임을 밝힙니다. https://school.programmers.co.kr/learn/courses/30/lessons/59042 해당 문제를 요약하면 다음과 같다.1. 입양 간 기록은 있지만 보호소에 들어온 기록이 없는 동물의 id와 이름을 조회2. id 기준으로 오름차순 정렬 방법 1) JOIN앞에서 풀이한 '오랜 기간 보호한 동물 (1)'을 먼저 해결했기 때문에, 자연스럽게 그 방법이 떠올랐다. 입양 간 기록은 반드시 존재해야 하므로, animal_outs를 기준으로 animal_ins를 LEFT JOIN하여 문제를 해결하는 방식이다. -- 방법 1) JOINSELECT o.animal_id , o.nameFROM animal_o..
📢 본 포스팅에서 사용되는 자료와 출처는 Programmers 임을 밝힙니다. https://school.programmers.co.kr/learn/courses/30/lessons/59044 해당 문제를 요약하면 다음과 같다.1. 아직 입양되지 않은 동물 중에서 가장 오래 보호소에 있었던 3마리의 이름과 보호 시작일을 조회 2. 보호 시작일 기준으로 오름차순 정렬 문제에서 언급한 "아직 입양되지 않은 동물 중"이란, animal_ins 테이블에는 존재하지만 animal_outs 테이블에는 존재하지 않는 동물을 의미한다. 즉, animal_ins 테이블과 animal_outs 테이블을 LEFT JOIN 한 후, animal_outs 테이블의 기본 키(pk) 값이 NULL인 동물을 찾아야 한다.SELEC..
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..