Database

Database/MySQL

[MySQL] DATEDIFF, TIMEDIFF, PEROID_DIFF

프로그래머스 SQL문제를 풀다가 알게 된 사실! DATE - DATE 는 두 날짜 사이의 일수가 계산되는 것이 아니라 숫자로 연산된다. 그래서 뺄셈 연산이 아닌 DATEDIFF() 를 사용해야한다. DATEDIFF 를 포함하여 여러 날짜 계산 함수를 정리해놓으려 한다. DATEDIFF : 두 기간 사이의 일수 DATEDIFF (종료일, 시작일) 두 인수의 날짜 포맷은 YYYY-MM-DD 또는 YYYY-MM-DD HH:MM:SS 형태로 지정 시간은 계산에 포함하지 않음 TIMEDIFF : 두 기간 사이의 시간 - TIMEDIFF(종료시간, 시작시간) 두 인수의 시간포맷은 HH:MM:SS 또는 YYYY-MM-DD HH:MM:SS 형태로 지정 PEROID_DIFF : 두 기간 사이의 개월 수 PEROID_DI..

Database/MySQL

[Programmers/MySQL] 상품을 구매한 회원 비율 구하기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/131534 USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요. 나의 풀이 1. 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매..

Database/MySQL

[Programmers/MySQL] 년, 월, 성별 별 상품 구매 회원 수 구하기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/131532 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 첫번째 답안 (오답) SELECT YEAR(SALES_DATE) AS YEAR, MONTH(SALES_DATE) AS MONTH, GENDER, COUNT(*) AS USERS FROM ONLINE_SALE LEFT JOIN (SELECT USER_ID, GENDER FROM USER_INFO) A ON ONLINE_SALE.USER_ID = A.USER_ID WHERE GENDER ..

Database/MySQL

[Programmers/MySQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/157340 풀이 SELECT CAR_ID, CASE WHEN CAR_ID IN ( SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE '2022-10-16' BETWEEN START_DATE AND END_DATE ) THEN '대여중' ELSE '대여 가능' END AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID ORDER BY CAR_ID DESC CASE WHEN THEN 구문으로 조건 걸어주고 칼럼 추가 해주는 방식을 사용하였다.

Database/MySQL

[Programmers/MySQL]대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/151139 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세..

Database/MySQL

[MySQL] NULL 처리

NULL - 결측치 / 0이 아니라 데이터에 값이 없다는 의미NULL 처리 방법 비교연산자(=, )로 NULL을 조회할 수 없다. IS NULL - 해당 값이 NULL인 값만 가져오기 SELECT MEMBER_ID, MEMBER_NAME, GENDER FROM MEMBER_PROFILE WHERE TLNO IS NULL IS NOT NULL - 해당 값이 NULL이 아닌 값만 가져오기 SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE TLNO IS NOT NULL IFNULL() - 해당 Column값이 NULL을 반환할 때, 다른 값으로 출력할 수 있도록 하는 함수- IFNULL(DATA, '대체 값') 형태 S..

Database/MySQL

[Programmers/MySQL] TRUNCATE() 와 ROUND()

문제 https://school.programmers.co.kr/learn/courses/30/lessons/131530 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 만원 단위의 가격대 별로 상품 개수를 출력하기 위해선 상품 가격 PRICE를 10000으로 나눈 몫에서 다시 10000을 곱한 값으로 GROUPBY하면 된다고 생각했다. SELECT PRICE DIV 10000 * 10000 AS PRICE_GROUP, COUNT(*) AS PRODUCTS FROM PRODUCT GROUP BY PRICE_GROUP ORDER BY PRICE_G..

Database/MySQL

[Programmers/MySQL] 데이터가 없는 날짜/시간은 0으로 처리하기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/59413 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 0~23시까지의 결과가 나오기 위해선 특정시간에 없는 데이터는 0으로 처리되어야한다. 일반적으로 GROUP BY HOUR를 한다면 데이터가 있는 시간만 결과로 나올 것이기 때문이다. SQL 초보라 그런지 어떻게 해야할지 감이 안잡혀 다른 사람들의 풀이방법을 참고해보았다. 1. SET 사용 SET을 이용해 새로운 변수를 할당해주고 서브쿼리를 이용한다. 원본테이블의 DATETIME은 0시부..

flozl
'Database' 카테고리의 글 목록