TIL/SQL 28

TIL (8/1) 윈도우 함수(My SQL)

1. 윈도우 함수란?윈도우 함수는 SQL에서 집계 함수와 비슷하게 데이터를 집계하지만, 전체 데이터 집합이 아닌 특정 "윈도우" 또는 "슬라이스"에 대한 집계를 수행합니다. 각 행에 대해 계산을 수행하며, 그룹화된 데이터가 아닌 개별 행에서 결과를 계산합니다. 2. 윈도우 함수의 주요 구성 요소PARTITION BY : 데이터를 분할할 기준을 설정합니다. 이 구문으로 데이터 집합을 여러 파티션으로 나누어 각 파티션 내에서 윈도우 함수를 적용합니다.ORDER BY : 윈도우 함수가 계산될 순서를 정의합니다. 정렬된 순서에 따라 함수 결과가 달라질 수 있습니다.ROWS/ RANGE : 윈도우의 범위를 정의합니다. 특정 범위의 행을 지정할 수 있습니다.3. 윈도우 함수를 사용하는 이유는 ?1) 행별 계산 수행..

TIL/SQL 2024.08.01

프로그래머스| 저자별 카테고리별 매출액 집계하기(My SQL)

문제 설명다음은 어느 한 서점에서 판매중인 도서정보(BOOK), 저자정보(AUTHOR), 도서판매정보(BOOK_SALES) 테이블입니다. 문제2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요. 나의 풀이)select a.author_id, a.author_name, b.category, sum(b.price*s.sales) as total_sales from book b join bo..

TIL/SQL 2024.08.01

프로그래머스| 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기(My SQL)

문제 설명다음은 중고거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고거래 게시판 첨부파일 정보를 담은 USED_GOODS_FILE 테이블입니다. USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS은 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다. 문제 USED_GOODS_BOARD와 USED_GOODS_FILE 테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성해주세요. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬해주세요. 기본적인 파일경로는 /..

TIL/SQL 2024.08.01

TIL (7/31) <날짜 자료형 총 정리(My SQL)>

1. 날짜형 자료 기본My SQL 자료형한국은 UTC보다 9시간 빠르다. 방법1)#세션에서 시간대를 변경 SET time_zone = 'Asia/Seoul'; SELECT CURDATE(), CURRENT_TIME(), NOW(); 방법2) 글로벌 시간대를 변경한다. (ROOT 권한 필요)SET GLOBAL time_zone = 'Asia/Seoul'; SELECT CURDATE(), CURRENT_TIME(), NOW(); 방법3) 시간대를 변환하여 조회CONVERT_TZ(NOW(), FROMTZ, TO_TZ)SELECT CONVERT_TZ(NOW(), '+00:00', '+09:00') AS current_seoul_time; DATETIME vs TIMESTMAP 2. 날짜 변환 & 가공 함수YEA..

TIL/SQL 2024.07.31

프로그래머스| 우유와 요거트가 담긴 장바구니(My SQL)

조건 두개를 동시에 만족해야 하기에 self join을 활용하여 문제를 해결하였다. 나의 풀이)select a.cart_idfrom cart_products a join (select cart_id, namefrom cart_products) b on a.cart_id = b.cart_id where a.name = "Milk" and b.name = "Yogurt" group by cart_idorder by cart_id하나의 쿼리에선 name이 Milk인, 하나의 쿼리에선 Yogurt인 cart_id에 대해 교집합을 구하였다.^ㅁ^

TIL/SQL 2024.07.31

프로그래머스| 헤비 유저가 소유한 장소(My SQL)

처음 작성한 코드select id, name, host_id from (select *from placesgroup by host_id having count(*) >= 2) as a order by id 오류 발생 이유는 group by host_id로 인해 having절을 만족하는 host_id에 대한 행 총 두개만 출력이 된다.원하는 쿼리는 조건을 만족하는 host_id가 가진 모든 공간 정보가 나와야 하기에 where절에 서브쿼리를 사용해야 한다. 나의 풀이)select id, name, host_id from places where host_id in (select host_id from places group by host_id having count(*) >= 2) order by idwhe..

TIL/SQL 2024.07.31

SQL <자료형, 외부에서 데이터 불러오기>

1. 정수형 자료형SIGNED(기본)과 UNSIGNED 옵션을 가질 수 있음.전자는 양수/음수를 후자는 양수를 저장함.또한 정수형 자료형은 Auto_increment 제약조건을 이용하여 ID를 생성하는데 유용 2. 실수형 자료형이진법으로 데이터를 저장하는 컴퓨터 특성상 소수점의 정확한 저장이 어렵다.이를 부동소수점이라함. 저장이 효율적이지만 어느정도 정확도를 제한하겠다 --> 부동소수점저장이 비효율적이지만 정확도를 추구하겠다 -->고정소수점위부터 float, double, decimal 자료형 3. 문자 자료형정규표현식 - 문자열에서 특정 패턴을 찾기 위한 강력한 도구 - 자연어 처리를 할 수 있는 제일 간단한 도구 - REGEXP_LIKE() : 주어진 문자열이 정규표현식과 일치하는지 여부를 반환 - ..

TIL/SQL 2024.07.23

SQL<DDL, DML, 확장자>

1. 테이블 생성하기(DDL)CREATE TABLE {테이블명} ({컬럼1} {자료형} PRIMARY KEY      #일반적으로PK가 첫 번째옴 {컬럼2} {자료형} {제약조건}       #서로 관계를 가지고 있는 RDB 특성상 제약조건이 필요할때가 있음 );CREATE TABLE에서는 컬럼별로 제약조건을 설정할 수 있음.제약 조건이란 ?- 데이터의 무결성을 보장하는데 도움이 되는 시스템 ex) JOBS 테이블 생성하기CREATE TABLE jobs (    job_id VARCHAR(10) PRIMARY KEY,    job_title VARCHAR(100),    min_salary INT,    max_salary INT); 2. 데이터 조작하기(DML) 1) 데이터 삽입하기#기본 구성INSER..

TIL/SQL 2024.07.23

TIL (7/19) <날짜 차이 구하기 datediff()>

처음에 if(end_date - start_date >= 30, '장기 대여', '단기 대여') 이렇게 풀었다가 잘못된 데이터가 조회되었다.date형 자료에 (-) 연산을 하기 위해서는 datediff() 함수를 사용해야 한다.#datediff() 기본형datediff(큰 날짜, 작은 날짜) (나의 풀이)select history_id, car_id, date_format(start_date,'%Y-%m-%d') as start_date, date_format(end_date,'%Y-%m-%d') as end_date, if(datediff(end_date, start_date)+1 >= 30, '장기 대여', '단기 대여') as rent_type from car_rental_company_rental..

TIL/SQL 2024.07.19

TIL (7/17) <if문, 임시테이블>

1. if문select car_id, if(max(if(start_date = '2022-10-16', 1, 0))=0, '대여 가능', '대여중') as AVAILABILITY from CAR_RENTAL_COMPANY_RENTAL_HISTORY group by 1 order by 1 DESC## if 문 기본 구조if(조건, 조건이 참일경우 실행, 조건이 거짓일경우 실행) 2. 임시테이블with temp1 as( select car_id,           case when start_date = '2022-10-16' then 1           else 0 end as abailability from car_rental_company_rental_history)select car_id, if(m..

TIL/SQL 2024.07.17