728x90
📚문제
📝풀이
SET @HOUR = -1 # 변수 선언문
SELECT (@HOUR := @HOUR +1) AS HOUR # := 대입연산자, = 비교 연산자
, (SELECT COUNT(DATETIME)
FROM ANIMAL_OUTS
WHERE DATETIME = @HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23
갑자기 난이도가 확 올랐다
SQL 문제풀이에서 변수선언은 처음해보는 것 같다
1번째 코드
1) SET 명령어를 통해서 선언해주며
2) 변수 앞에 @를 붙인다
3) 참고로 변수 선언시에는 대입연산자(:=)와 비교연산자(=) 중 아무거나 사용해도 상관없다
2번째 코드
대입연산자(:=)를 통해 HOUR +1 을 대입해 나간다 (0부터 시작)
3-5번째 코드
SELECT 서브쿼리(= 스칼라 쿼리)* 생성
(SELECT COUNT(DATETIME)
FROM ANIMAL_OUTS
WHERE DATETIME = @HOUR) AS COUNT
ANIMAL_OUTS 테이블에서
DATETIME이 @HOUR랑 똑같은 시간대(0~23시)일때의
행 수 반환
=>
@HOUR 시간대(0~23시)일때 입양 수가 총 몇건이냐?
7번째 코드
변수 @HOUR가 22가 될때까지 진행
(HOUR가 22가 되면 SELECT문의 AS HOUR 에는 HOUR+1(=23)까지 할당됨)
++ SELECT 서브쿼리절 예시
# SELECT 절 서브쿼리 예시
# OUTER JOIN 사용 시
SELECT T1.EX_CD ,T2.BAS_CD_NM EX_CD_NM
FROM STOCK T1
LEFT OUTER JOIN BASECODE T2
ON (T2.BAS_CD_DV = 'EX_CD' AND T2.BAS_CD = T1.EX_CD)
# SELECT절 서브쿼리 사용 시
SELECT T1.EX_CD
,(SELECT A.BAS_CD_NM FROM BASECODE A
WHERE A.BAS_CD_DV = 'EX_CD' AND A.BAS_CD = T1.EX_CD) EX_CD_NM
FROM STOCK T1
SELECT 서브쿼리(=스칼라 서브쿼리) 작성 시
1. JOIN할 테이블을 FROM절에 작성
FROM BASECODE A
2. WHERE절에 JOIN조건으로 넣을 항목 작성
ON (T2.BAS_CD_DV = 'EX_CD' AND T2.BAS_CD = T1.EX_CD)
↕
WHERE A.BAS_CD_DV = 'EX_CD' AND A.BAS_CD = T1.EX_CD
SELECT 서브쿼리는 단일 값(=스칼라 값)을 반환
728x90
'SQL > 프로그래머스 SQL 고득점 kit' 카테고리의 다른 글
SQL 고득점 Kit / 주문량이 많은 아이스크림들 조회하기 - MySQL (0) | 2023.11.02 |
---|---|
SQL 고득점 Kit / 가격대 별 상품 개수 구하기 / MySQL (0) | 2023.10.31 |
SQL 고득점 Kit / GROUP BY / 년,월,성별 별 상품 구매 회원 수 구하기 /MySQL (0) | 2023.10.31 |
SQL 고득점 Kit / GROUP BY / 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 / MySQL (0) | 2023.10.27 |
SQL 고득점 kit / GROUP BY / 즐겨찾기가 가장 많은 식당 정보 출력하기 / MySQL (GROUP BY, 서브쿼리) (0) | 2023.10.26 |