프로그래머스 SQL 고득점 Kit
1. SELECT
-- 정렬의 기본은 오름차순. 여러 기준으로 정렬 가능하다 -- NAME으로 오름차순, DATETIME으로 내림차순 SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER BY NAME, DATETIME DESC -- 조건문 연산 기호: < <= > >= <> = (C++과 다르니 주의) SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION="Sick" /* 아픈 동물 */ WHERE INTAKE_CONDITION<>"Aged" /* 어린 동물 */ -- 중첩문을 사용하는 조건문 SELECT NAME FROM ANIMAL_INS WHERE DATETIME <= All(SELECT DATETIME FROM ANIMAL_INS) WHERE DATETIME = (SELECT MIN(DATETIME) FROM ANIMAL_INS)
2. SUM, MAX, MIN
-- 중복하지 않게 세기 SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS -- *GROUP BY를 사용할 수도 있다 (AS 안하면 안돌아감) SELECT COUNT(A.NAME) FROM (SELECT NAME FROM ANIMAL_INS GROUP BY NAME) AS A
3. GROUP BY
-- cat과 dog의 마리 수 조회 SELECT ANIMAL_TYPE, COUNT(*) AS COUNT FROM ANIMAL_INS WHERE ANIMAL_TYPE="cat" OR ANIMAL_TYPE="dog" GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE -- 이름별 동물 수 조회 SELECT NAME, COUNT(*) AS COUNT FROM ANMAL_INS WHERE NAME IS NOT NULL /* NULL 검사 반드시!! */ GROUP BY NAME HAVING COUNT>1 /* GROUP BY ~ HAVING */ ORDER BY NAME /* 이름의 오름차순 */ -- 시각 별 동물 조회 -- : datetime 함수 공부가 필요함 SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT FROM ANIMAL_OUTS GROUP BY HOUR HAVING HOUR>8 AND HOUR<20 ORDER BY HOUR -- *근데 이제 24시간을 곁들인 -- : WITH절, JOIN과 CASE, RECURSIVE 등 필요....! WITH RECURSIVE TIME AS (SELECT 0 AS HOUR UNION ALL SELECT HOUR+1 FROM TIME WHERE HOUR<23) SELECT HOUR, COUNT(CASE WHEN ANIMAL_ID IS NOT NULL THEN 1 END) AS COUNT FROM TIME LEFT OUTER JOIN ANIMAL_OUTS ON (HOUR=HOUR(DATETIME)) GROUP BY HOUR ORDER BY HOUR
왜 문법 하이라이트 표시가,,,이따위지,,,?
댓글