230426 TIL

하이·2023년 4월 26일
0

TIL

목록 보기
2/2

Subquery

SQL 에서는 query를 다른 query에 위치할 수 있습니다. 다음은 예시입니다.

SELECT *
FROM Customers
WHERE age = (
  SELECT MIN(age)
  FROM Customers
);

subquery의 실행 순서는 다음과 같습니다.
1. Subquery를 실행해 가장 어린 나이를 선택합니다.
2. Outer query(Subquery를 포함하고 있는 query) 를 실행해 Subquery에서 얻은 나이와 같은 행들을 선택합니다.

다음의 사이트에서 예제를 실행할 수 있습니다.


입양 시각 구하기 (2)

sql 연습을 하며 다음의 문제를 풀게 되었습니다.

코딩테스트 연습 - 입양 시각 구하기(2) | 프로그래머스 스쿨 (programmers.co.kr)

자력으로 해결이 어려워 검색을 해보니 되게 간결하게 푼 풀이가 있더라구요.

변수를 선언해서 테이블을 만드는 방식으로, 처음에는 좋아보였으나 예외를 발견했습니다.

  • animal_outs 테이블의 row의 수가 23 이하라면, 충분한 row가 만들어지지 않는다.
-- create
CREATE TABLE EMPLOYEE (
  empId INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  dept TEXT NOT NULL
);

-- insert
INSERT INTO EMPLOYEE VALUES (0001, 'Clark', 'Sales');
INSERT INTO EMPLOYEE VALUES (0002, 'Dave', 'Accounting');
INSERT INTO EMPLOYEE VALUES (0003, 'Ava', 'Sales');

-- fetch 
SELECT * FROM EMPLOYEE WHERE dept = 'Sales';

SET @TEMP := -1;
 
SELECT (@TEMP := @TEMP + 1) AS HOUR
FROM EMPLOYEE
WHERE @TEMP < 23

EMPLOYEE 테이블의 row가 3개 이므로 3개의 행 밖에 만들어지지 않습니다.

따라서 반복문으로 풀어야 할 거 같습니다.

다음의 사이트에서 테스트했습니다.

profile
안녕하세요

0개의 댓글