목록전체 글 (180)
YataNox
문제 DATEDIFF로 비교하면 될 것같지만 시/분/초 단위로 입양일이 더 빠를 땐 구분할 수 없다.TIMESTAMPDIFF로 SECOND 단위로 비교한다.코드SELECT ai.ANIMAL_ID, ai.NAMEFROM ANIMAL_INS ai JOIN ANIMAL_OUTS ao ON ai.ANIMAL_ID = ao.ANIMAL_IDWHERE TIMESTAMPDIFF(SECOND, ao.DATETIME, ai.DATETIME) > 0ORDER BY ai.DATETIME;
문제WHERE절 에 2022년 1월 데이터만 조회하게 걸러내고 카테고리별로 Grouping 하고 SUM함수를 사용하여 수를 집계했다.코드SELECT b.CATEGORY, SUM(bs.SALES) AS TOTAL_SALESFROM BOOK b JOIN BOOK_SALES bs ON b.BOOK_ID = bs.BOOK_IDWHERE DATE_FORMAT(bs.SALES_DATE, '%Y-%m') = '2022-01'GROUP BY CATEGORYORDER BY 1 ASC;
문제 두 테이블의 ID를 기준으로 병합한 뒤 입양 테이블이 NULL인 행 중에 날짜가 가장 오래된 것 3개만 출력한다. 코드WITH temp AS ( SELECT ai.NAME, ai.DATETIME FROM ANIMAL_INS ai LEFT JOIN ANIMAL_OUTS ao on ai.ANIMAL_ID = ao.ANIMAL_ID WHERE ao.DATETIME IS NULL ORDER BY 2 limit 3)SELECT NAME, DATETIMEFROM tempORDER BY 2 ASC;
1.3 데이터 저장 구조 및 I/O 메커니즘1.3.1 SQL이 느린 이유대부분은 I/O 문제이다. I/O란 입출력을 뜻하는 말로 입출력 동안에는 프로세스가 잠을 잔다.프로세스가 일하지 않고 자는 이유는 여러가지가 있지만 가장 대표적인 이유는 I/O다. 프로세스는 '실행 중인 프로그램'을 나타내며 아래와 같은 생명주기를 갖는다.생성 이후로 종료 전까지 준비와 실행, 대기 상태를 반복한다. 실행 중인 프로세스는 수시로 인터럽트로 인해 준비 상태로 전환 했다가 다시 실행 상태로 전환되고는 한다. 여러 프로세스가 한 CPU를 공유할 수는 있지만 특정 순간에는 한 프로세스만 사용할 수 있기 때문에 해당 메커니즘이 필요하다. 인터럽트가 없었던, 열심히 일하던 프로세스도 디스크에서 데이터를 잃어야 할 땐 CPU를 O..
1.2 SQL 공유 및 재사용소프트 파싱과 하드 파싱의 차이점을 알아보고, 동시성이 높은 온라인 트랙잭션 처리 시스템에서 바인드 변수가 왜 중요한지 이해해보자.1.2.1 소프트 파싱 vs 하드 파싱SQL 파싱, 최적화, 로우 소스 코드 생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용할 수 있게 캐싱해 두는 메모리 공간을 라이브러리 캐시라고 한다. (SGA 구성요소) 사용자가 SQL문을 전달하면 DBMS는 SQL을 파싱 후 해당 SQL 라이브러리 캐시에 존재하는 지 확인한다. 캐시를 찾으면 바로 실행 단계로 넘어가지만, 찾지 못하면 최적한 단계를 거친다. 캐시를 찾아 바로 실행하는 것을 소프트 파싱찾는 데 실패해 최적화 단계를 거치는 것을 하드 파싱이라고 한다. 1.2.2 바인드 변수의 중요성* 이름..
1.1 SQL 파싱과 최적화1.1.1 구조적, 집합적, 선언적 질의 언어SQL은 Structured Query Language 의 줄임말이다. 그대로 구조적 질의 언어라 한다.SQL is designed for a specific purpose : to query data contained in a relational database.SQL is set-based, declarative query language, not an imperative language such as C or BASIC.오라클 PL/SQL, SQL Server T-SQL 처럼 절차적인 프로그래밍 기능을 구현 할 수 있는 확장 언어도 제공하지만, SQL은 기본적으로 구조적이고, 집합적이며, 선언적인 질의 언어다. 그러나 그 결과..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/299310 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 역시 프로그래머스는 LV이 믿을게 못된다.편차를 구하는게 핵심인 문제이다.1. 날짜에서 년도만 뽑아낸 서브컬럼을 가진 테이블(e)을 만든다.2. 년도별 최고 크기 값의 서브컬럼을 가진 테이블(s)을 만든다.3. 두 테이블을 조인하여 s 테이블의 최고 크기 값 - e테이블의 각 크기를 연산하여 편차값을 구한다.코드WITH YEAR_T AS( SELECT *, YEAR(DIFFERENTIATION_DATE) AS 'YEAR' FR..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/284531 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 호선 별로 그룹화하고 역간의 거리를 기준으로 합치면(sum) 총 누계거리,평균내면(avg) 평균 거리가 나온다. 각각 2,3자리번째의 수에서 반올림 해주고 concat을 이용해서 km단위를 붙여준다. ps. 처음에 order by할 때 2 desc를 했다가 틀렸다. 반올림 처리 되는 값 때문에 원하는 대로 정렬이 안될 수 있으니 반올림한 부분을 제외하고 정렬처리하자코드SELECT ROUTE, CONCAT(ROUND(SUM(D_BETWEE..