전체 글
-
★DISTINCT★[프로그래머스 ORACLE SQL]중복값 제거2023.01.04
https://school.programmers.co.kr/learn/courses/30/lessons/133027?language=oracle
SELECT FLAVOR FROM (
SELECT A.FLAVOR AS FLAVOR , A.TOTAL_ORDER + B.TOTAL_ORDER AS TOTAL_ORDER FROM
(SELECT FLAVOR , SUM(TOTAL_ORDER) AS TOTAL_ORDER FROM JULY
GROUP BY FLAVOR) A
LEFT JOIN FIRST_HALF B
ON A.FLAVOR = B.FLAVOR
ORDER BY TOTAL_ORDER DESC)
WHERE ROWNUM <=3
==> 서브쿼리 큰거 하나 ==> JOIN 이후
==> A.TOTAL_ORDER + B.TOTAL_ORDER ==> 더하기
'SQL > JOIN' 카테고리의 다른 글
[프로그래머스 ORACLE SQL]오랜 기간 보호한 동물(1)★FETCH_상위 N개 레코드★FULL OUTER JOIN (0) | 2023.06.22 |
---|---|
[프로그래머스 ORACLE SQL]상품 별 오프라인 매출 구하기★어디로 조인할지 차근 차근 생각★ (0) | 2023.06.22 |
[프로그래머스 ORACLE SQL]오랜기간 보호한 동물(1)★LEFT JOIN★VER2.0 (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]있었는데요 없었습니다★LEFT JOIN★날짜간 차이 계산★TO_NUMBER(TO_DATE())★VER2.0 (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]없어진 기록 찾기★LEFT JOIN★NOT IN★VER3.0 (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]경기도에 위치한 식품창고 목록 출력하기★LIKE★NVL★VER 2.0★
https://school.programmers.co.kr/learn/courses/30/lessons/131114
VERSION 2.0
SELECT WAREHOUSE_ID , WAREHOUSE_NAME , ADDRESS , NVL(FREEZER_YN, 'N') AS FREEZER_YN FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '경기%'
ORDER BY WAREHOUSE_ID
VERSION 1.0
SELECT WAREHOUSE_ID , WAREHOUSE_NAME , ADDRESS , NVL(FREEZER_YN , 'N') AS FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE WAREHOUSE_NAME LIKE ('%경기%')
ORDER BY WAREHOUSE_ID ASC
'SQL > GROUP BY' 카테고리의 다른 글
[프로그래머스 ORACLE SQL]진료과별 총 예약 횟수 출력하기★GROUP BY 순서★ (0) | 2023.06.21 |
---|---|
[프로그래머스 ORACLE SQL]고양이와 개는 몇 마리 있을까★GROUP BY★CASE WHEN THEN★ IN (0) | 2023.06.21 |
[프로그래머스 ORACLE SQL]가격대별 상품개수★SUBSTR(열, 자를거 시작위치 , 자를거 끝 위치)★RPAD (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]입양 시각 구하기(2)★FULL OUTER JOIN★CONNECT BY LEVEL절 실습!!!!★VER3.0 (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]년, 월, 성별 별 상품 구매 회원 수 구하기★INNER JOIN★ (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]가격대별 상품개수★SUBSTR(열, 자를거 시작위치 , 자를거 끝 위치)★RPAD
https://school.programmers.co.kr/learn/courses/30/lessons/131530
SELECT RPAD(SUBSTR(PRICE , 0,1) ,5 , 0) AS PRICE_GROUP , COUNT(*) FROM PRODUCT
GROUP BY SUBSTR(PRICE , 0,1)
ORDER BY SUBSTR(PRICE , 0,1)
==> SUBSTR(열, 자를거 시작위치 , 자를거 끝 위치)
==> RPAD(열 , 전체문자열크기, 채울 숫자)
'SQL > GROUP BY' 카테고리의 다른 글
[프로그래머스 ORACLE SQL]고양이와 개는 몇 마리 있을까★GROUP BY★CASE WHEN THEN★ IN (0) | 2023.06.21 |
---|---|
[프로그래머스 ORACLE SQL]경기도에 위치한 식품창고 목록 출력하기★LIKE★NVL★VER 2.0★ (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]입양 시각 구하기(2)★FULL OUTER JOIN★CONNECT BY LEVEL절 실습!!!!★VER3.0 (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]년, 월, 성별 별 상품 구매 회원 수 구하기★INNER JOIN★ (0) | 2023.01.04 |
★WHERE 절 서브쿼리★LPAD★[프로그래머스 ORACLE SQL]즐겨찾기가 많은 식당 출력 (0) | 2023.01.04 |
https://school.programmers.co.kr/learn/courses/30/lessons/59413
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
VER 3.0
SELECT A.HOUR AS HOUR , COUNT(B.ANIMAL_TYPE) AS COUNT FROM
(SELECT LEVEL -1 AS HOUR FROM DUAL
CONNECT BY LEVEL <=24 ) A
LEFT JOIN ANIMAL_OUTS B ON
TO_CHAR(DATETIME , 'HH24') = A.HOUR
GROUP BY HOUR
ORDER BY A.HOUR
==> LEFT JOIN ==> CONNECT BY LEVEL
SELECT A.HOUR , COUNT(B.ANIMAL_ID) AS COUNT FROM
(SELECT LEVEL-1 AS HOUR FROM DUAL
CONNECT BY LEVEL<=24) A
FULL OUTER JOIN ANIMAL_OUTS B
ON A.HOUR = TO_CHAR(DATETIME , 'HH24')
GROUP BY A.HOUR
ORDER BY HOUR
VER 1.0
1. CONNECT BY LEVEL 절 연습!!!
SELECT LEVEL AS NO FROM DUAL
CONNECT BY LEVEL <=10
2. 2023년 12월까지의 열 생성해봐라!
SELECT '2023 년 '||LPAD(LEVEL,2,0)||'월' AS YEAR
FROM DUAL
CONNECT BY LEVEL <=12
==> LPAD(변수, 2칸, 남은칸숫자(0)넣기)
3. 특정 구간의 날짜 찾기
SELECT TO_DATE('20221001', 'YYYYMMDD') + (LEVEL-1) AS DT
FROM DUAL
CONNECT BY LEVEL <= (TO_DATE('20221011', 'YYYYMMDD') - TO_DATE('20221001', 'YYYYMMDD')) +1
4. 최종실습
SELECT A.HOUR AS HOUR, COUNT(B.ANIMAL_TYPE) AS COUNT FROM
(SELECT DISTINCT (LEVEL-1) AS HOUR FROM ANIMAL_OUTS
CONNECT BY LEVEL <= 24
) A
LEFT JOIN ANIMAL_OUTS B
ON TO_CHAR(DATETIME,'HH24') = A.HOUR
GROUP BY HOUR
ORDER BY HOUR
==> CONNECT BY LEVEL <= 24를 통해 1부터 24까지의 LEVEL 변수 생성
==> A 테이블에 0부터 23까지의 열 이 생성되었다.
==>ANIMAL_OUTS(B) 테이블을 A테이블에 LEFT JOIN한다. ==> DATETIME의 24시간제(HH24) 와 A테이블(0~23)이 일치하는 것들을 머리를 집어넣는다.
==> COUNT(ANIMAL_OUTS(B)) ==> GROUP 으로 HOUR간 정렬이 완료가 된다. COUNT가 가능해진다.
VER 2.0 FROM 절 서브쿼리문 활용
SELECT A.HOUR , NVL(B.COUNT , 0) AS COUNT FROM
(SELECT LEVEL-1 AS HOUR FROM DUAL
CONNECT BY LEVEL<=24) A FULL OUTER JOIN (
SELECT TO_NUMBER(TO_CHAR(DATETIME, 'HH24')) AS HOUR , COUNT(*) AS COUNT FROM ANIMAL_OUTS
GROUP BY TO_NUMBER(TO_CHAR(DATETIME, 'HH24'))
) B ON A.HOUR = B.HOUR
ORDER BY HOUR
===================================
-- 코드를 입력하세요
-- SELECT TO_NUMBER(TO_CHAR(DATETIME , 'HH')) AS HOUR, COUNT(*) FROM ANIMAL_OUTS
-- GROUP BY TO_CHAR(DATETIME , 'HH')
-- ORDER BY HOUR
-- SELECT TO_CHAR(DATETIME , 'HH24') AS HOUR , COUNT(*) AS COUNT FROM ANIMAL_OUTS
-- GROUP BY TO_CHAR(DATETIME , 'HH24')
-- ORDER BY HOUR
-- SELECT A.HOUR AS HOUR, COUNT(B.ANIMAL_TYPE) AS COUNT FROM
-- (SELECT DISTINCT (LEVEL-1) AS HOUR FROM ANIMAL_OUTS
-- CONNECT BY LEVEL <= 24
-- ) A
-- LEFT JOIN ANIMAL_OUTS B
-- ON TO_CHAR(DATETIME,'HH24') = A.HOUR
-- GROUP BY HOUR
-- ORDER BY HOUR
-- SELECT LEVEL AS NO FROM DUAL
-- CONNECT BY LEVEL <=10
-- SELECT '2023 년 ' ||LPAD(LEVEL, 2, 0)||'월' AS NO
-- FROM DUAL
-- CONNECT BY LEVEL <=12
-- SELECT '2023 년 '||LPAD(LEVEL,2,0)||'월' AS YEAR
-- FROM DUAL
-- CONNECT BY LEVEL <=12
-- SELECT TO_DATE('20221001', 'YYYYMMDD') + (LEVEL-1) AS DT
-- FROM DUAL
-- CONNECT BY LEVEL <= (TO_DATE('20221011', 'YYYYMMDD') - TO_DATE('20221001', 'YYYYMMDD')) +1
SELECT A.HOUR , NVL(B.COUNT , 0) AS COUNT FROM
(SELECT LEVEL-1 AS HOUR FROM DUAL
CONNECT BY LEVEL<=24) A FULL OUTER JOIN (
SELECT TO_NUMBER(TO_CHAR(DATETIME, 'HH24')) AS HOUR , COUNT(*) AS COUNT FROM ANIMAL_OUTS
GROUP BY TO_NUMBER(TO_CHAR(DATETIME, 'HH24'))
) B ON A.HOUR = B.HOUR
ORDER BY HOUR
'SQL > GROUP BY' 카테고리의 다른 글
[프로그래머스 ORACLE SQL]경기도에 위치한 식품창고 목록 출력하기★LIKE★NVL★VER 2.0★ (0) | 2023.01.04 |
---|---|
[프로그래머스 ORACLE SQL]가격대별 상품개수★SUBSTR(열, 자를거 시작위치 , 자를거 끝 위치)★RPAD (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]년, 월, 성별 별 상품 구매 회원 수 구하기★INNER JOIN★ (0) | 2023.01.04 |
★WHERE 절 서브쿼리★LPAD★[프로그래머스 ORACLE SQL]즐겨찾기가 많은 식당 출력 (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]입양 시각 구하기(1)★BETWEEM★HH24 (0) | 2022.10.28 |
[프로그래머스 ORACLE SQL]년, 월, 성별 별 상품 구매 회원 수 구하기★INNER JOIN★
https://school.programmers.co.kr/learn/courses/30/lessons/131532
USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
VERSION 2.0
SELECT TO_CHAR(SALES_DATE , 'YYYY') AS YEAR , TO_NUMBER(TO_CHAR(SALES_DATE ,'MM')) AS MONTH ,
B.GENDER AS GENDER, COUNT(DISTINCT(A.USER_ID)) AS USERS
FROM ONLINE_SALE A
INNER JOIN USER_INFO B ON B.USER_ID = A.USER_ID
GROUP BY TO_CHAR(SALES_DATE , 'YYYY') , TO_NUMBER(TO_CHAR(SALES_DATE ,'MM')) , B.GENDER
HAVING B.GENDER IS NOT NULL
ORDER BY YEAR , MONTH , GENDER
==> COUNT(DISTINCT) ==> 중복값 제거해줘야 한다.
VERSION 1.0
1.
SELECT TO_CHAR(B.SALES_DATE , 'YYYY') AS YEAR , TO_NUMBER(TO_CHAR(B.SALES_DATE , 'MM')) AS MONTH ,
A.GENDER AS GENDER AS USERS
FROM ONLINE_SALE B
INNER JOIN USER_INFO A ON B.USER_ID = A.USER_ID
ORDER BY YEAR ASC , MONTH ASC , A.GENDER ASC
A ==> USER_INFO 테이블
B ==> ONLINE_SALE 테이블
INNER JOIN ==> ONLINE_SALE(B)에 있는 USER_ID와 USER_INFO(A)에 있는 USER_ID가 동일한거에 대해 JOIN
교집합을 추출하는 것이다.
2.
SELECT TO_CHAR(B.SALES_DATE , 'YYYY') AS YEAR , TO_NUMBER(TO_CHAR(B.SALES_DATE , 'MM')) AS MONTH ,
A.GENDER AS GENDER AS USERS , B.PRODUCT_ID , A.AGE , A.USER_ID , B.USER_ID
FROM ONLINE_SALE B
INNER JOIN USER_INFO A ON B.USER_ID = A.USER_ID
ORDER BY YEAR ASC , MONTH ASC , A.GENDER ASC
ONLINE_SALE 테이블(B) 과 USER_INFO(A) 테이블의 USER_ID가 동일한 데이터에 대해 교집합하여 데이터 추출
==> age에 null값 ==> A테이블에 이미 비어있던것!
==> INNER JOIN을 통해 GROUP절 사용시 A와 B 상관없이 GROUP 사용가능하다.
3.
SELECT TO_CHAR(B.SALES_DATE , 'YYYY') AS YEAR , TO_NUMBER(TO_CHAR(B.SALES_DATE , 'MM')) AS MONTH ,
A.GENDER AS GENDER , COUNT(DISTINCT(A.USER_ID)) AS USERS
FROM ONLINE_SALE B
INNER JOIN USER_INFO A ON B.USER_ID = A.USER_ID
GROUP BY TO_CHAR(B.SALES_DATE , 'YYYY') , TO_NUMBER(TO_CHAR(B.SALES_DATE , 'MM')) , A.GENDER
HAVING A.GENDER IS NOT NULL
ORDER BY YEAR ASC , MONTH ASC , A.GENDER ASC
==> GROUP BY ==> ONLINE_SALE(B) 테이블의 SALES_DATE 의 연도별 , ONLINE_SALE(B) 테이블의 월별 ,
USER_INFO(A) 테이블의 성별 데이터를 GROUP 화
==> HAVING 절을 통해 USER_INFO(A)테이블의 성별데이터가 NULL값이 아닌것에 대해서만 출력하기
'SQL > GROUP BY' 카테고리의 다른 글
[프로그래머스 ORACLE SQL]가격대별 상품개수★SUBSTR(열, 자를거 시작위치 , 자를거 끝 위치)★RPAD (0) | 2023.01.04 |
---|---|
[프로그래머스 ORACLE SQL]입양 시각 구하기(2)★FULL OUTER JOIN★CONNECT BY LEVEL절 실습!!!!★VER3.0 (0) | 2023.01.04 |
★WHERE 절 서브쿼리★LPAD★[프로그래머스 ORACLE SQL]즐겨찾기가 많은 식당 출력 (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]입양 시각 구하기(1)★BETWEEM★HH24 (0) | 2022.10.28 |
[프로그래머스 ORACLE SQL]동명 동물 수 찾기★FROM절의 서브쿼리★ (0) | 2022.10.27 |
★WHERE 절 서브쿼리★LPAD★[프로그래머스 ORACLE SQL]즐겨찾기가 많은 식당 출력
select food_type, LPAD(REST_ID , 5 , '0') AS REST_ID , rest_name, favorites
from rest_info
where (food_type, favorites) in
(SELECT FOOD_TYPE , MAX(FAVORITES) AS FAVORITES FROM REST_INFO
GROUP BY FOOD_TYPE)
ORDER BY FOOD_TYPE DESC
==> LPAD(REST_ID , 5 , '0') ==> 총 5개의 칸중에 빈공간에 0으로 채워넣기
==> WHERE 절 IN ==> 서브쿼리안의 값에 들어있는 거 출력하기
'SQL > GROUP BY' 카테고리의 다른 글
[프로그래머스 ORACLE SQL]가격대별 상품개수★SUBSTR(열, 자를거 시작위치 , 자를거 끝 위치)★RPAD (0) | 2023.01.04 |
---|---|
[프로그래머스 ORACLE SQL]입양 시각 구하기(2)★FULL OUTER JOIN★CONNECT BY LEVEL절 실습!!!!★VER3.0 (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]년, 월, 성별 별 상품 구매 회원 수 구하기★INNER JOIN★ (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]입양 시각 구하기(1)★BETWEEM★HH24 (0) | 2022.10.28 |
[프로그래머스 ORACLE SQL]동명 동물 수 찾기★FROM절의 서브쿼리★ (0) | 2022.10.27 |
★DISTINCT★[프로그래머스 ORACLE SQL]중복값 제거
https://school.programmers.co.kr/learn/courses/30/lessons/59408
SELECT COUNT(DISTINCT(NAME)) AS COUNT FROM ANIMAL_INS
==> COUNT(*)을 하면 NULL 값도 다 COUNT 한다.
'SQL > SUM,MAX,MIN' 카테고리의 다른 글
★WHERE절 서브쿼리★[프로그래머스 ORACLE SQL]가격이 제일 비싼 식품의 정보 출력하기 (0) | 2023.06.21 |
---|---|
시간에 MAX 활용 ★FROM절 서브쿼리★VER2.0 ★[프로그래머스 ORACLE SQL]최댓값 구하기 (0) | 2023.01.04 |
★FROM절 서브쿼리★[프로그래머스 ORACLE SQL]가장 비싼 상품 구하기 (0) | 2022.11.05 |
시간에 MAX 활용 ★FROM절 서브쿼리★VER2.0 ★[프로그래머스 ORACLE SQL]최댓값 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/59415
VERSION 2.0
SELECT MAX(DATETIME) AS 시간 FROM ANIMAL_INS
==> 시간에 MAX 활용
VERSION 1.0
SELECT DATETIME AS 시간 FROM
(SELECT DATETIME FROM ANIMAL_INS
ORDER BY DATETIME DESC)
WHERE ROWNUM<2
==> FROM 절 서브쿼리 활용 , ROWNUM 활용
'SQL > SUM,MAX,MIN' 카테고리의 다른 글
★WHERE절 서브쿼리★[프로그래머스 ORACLE SQL]가격이 제일 비싼 식품의 정보 출력하기 (0) | 2023.06.21 |
---|---|
★DISTINCT★[프로그래머스 ORACLE SQL]중복값 제거 (0) | 2023.01.04 |
★FROM절 서브쿼리★[프로그래머스 ORACLE SQL]가장 비싼 상품 구하기 (0) | 2022.11.05 |