[프로그래머스] SQL 고득점 Kit : GROUP BY

6166 단어 sql코딩테스트sql

GROUP BY [링크]


고양이와 개는 몇 마리 있을까

SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY 
CASE ANIMAL_TYPE
    WHEN 'Cat' THEN 1
    WHEN 'Dog' THEN 2
END;
🔎CASE 칼럼명
	WHEN 조건 THEN 결과
	...
    	ELSE 결과
  END

동명 동물 수 찾기

<SELECT NAME, COUNT(NAME) AS COUNT FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT > 1
ORDER BY NAME;

🔎 WHERE vs HAVING
둘다 조건을 주는 명령어이지만,
WHERE 같은 경우는 모든 테이블에 대해 우선 조건을 주고 GROUP BY(그룹화) 할수 있고
HAVING은 GROUP BY 된 이후 그룹화되어진 새로운 테이블에 조건을 줄 수 있습니다.

입양 시각 구하기(1)

SELECT HOUR(DATETIME) HOUR, COUNT(DATETIME) COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR >= 9 and HOUR <= 19
ORDER BY HOUR(DATETIME);

🔎 HOUR() : 날짜 데이터에서 시간만 추출
YEAR , MONTH, DAY, MINUTE, SECOND 다 가능

입양 시각 구하기(2)

SET @hour := -1; 
SELECT (@hour := @hour +1) as HOUR ,  -- 1씩 증가시켜서 해당 시간 카운트
        (SELECT COUNT(*) FROM ANIMAL_OUTS 
        WHERE HOUR(DATETIME)=@hour) AS COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23; 
-- 마지막인 @hour=22가 SELECT절에서 +1되어 23까지 카운트 합니다.

🔎 SET @변수명 := 초기값;

  • 사용자 정의 변수
  • 저장하는 값에 의해 자료형이 정해집니다.
    (Integer, Decimal, Float, binary, Float, String 가능)
  • 초기화 하지 않으면 NULL 값 생성, 자료형은 String
  • SQL에서 = 을 비교 연산자로 :=을 대입 연산자로 사용
    (SET절 에서는 둘 다 대입 연산자로 사용 가능)

좋은 웹페이지 즐겨찾기