
https://school.programmers.co.kr/learn/courses/30/parts/17044
REST_INFO 식당 정보 테이블REST_ID 식당 IDREST_NAME 식당 이름FOOD_TYPE 음식 종류, NULLVIEWS 조회수, NULLFAVORITES 즐겨찾기 수, NULLPARKING_LOT 주차장 유무, NULLADDRESS 주소, NULLTEL 전화번호, NULLGROUP BY FOOD_TYPESELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITESORDER BY FOOD_TYPE descSELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE, FAVORITES) in (SELECT FOOD_TYPE, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE)
ORDER BY FOOD_TYPE descSELECT A.FOOD_TYPE, A.REST_ID, A.REST_NAME, A.FAVORITES
FROM REST_INFO A
WHERE A.FAVORITES = (SELECT MAX(B.FAVORITES)
FROM REST_INFO B
WHERE B.FOOD_TYPE = A.FOOD_TYPE)
ORDER BY FOOD_TYPE descUSED_GOODS_BOARD 중고 거래 게시판 정보 테이블BOARD_ID 게시글 IDWRITER_ID 작성자 IDTITLE 게시글 제목CONTENTS 게시글 내용PRICE 가격CREATED_DATE 작성일, DATESTATUS 거래상태VIEWS 조회수USED_GOODS_USER 중고 거래 게시판 사용자 정보 테이블USER_ID 회원 IDNICKNAME 닉네임CITY 시STREET_ADDRESS1 도로명 주소STREET_ADDRESS2 상세 주소, NULLTLNO 전화번호WHERE STATUS = 'DONE'WHERE (SELECT SUM(PRICE) ...) >= 700000SELECT USER_ID, NICKNAME, SUM(PRICE)ORDER BY SUM(PRICE)SELECT USER_ID, NICKNAME, SUM(PRICE) as TOTAL_SALES
FROM USED_GOODS_BOARD A
JOIN USED_GOODS_USER B on A.WRITER_ID = B.USER_ID
WHERE STATUS = 'DONE'
GROUP BY USER_ID
HAVING TOTAL_SALES >= 700000
ORDER BY TOTAL_SALESBOOK : 어느 한 서점에서 판매중인 도서들의 도서 정보 테이블
| Column name | Type | Nullable | Description |
|---|---|---|---|
| BOOK_ID | INTEGER | FALSE | 도서 ID |
| CATEGORY | VARCHAR(N) | FALSE | 카테고리 (경제, 인문, 소설, 생활, 기술) |
| AUTHOR_ID | INTEGER | FALSE | 저자 ID |
| PRICE | INTEGER | FALSE | 판매가 (원) |
| PUBLISHED_DATE | DATE | FALSE | 출판일 |
AUTHOR 도서의 저자의 정보 테이블
| Column name | Type | Nullable | Description |
|---|---|---|---|
| AUTHOR_ID | INTEGER | FALSE | 저자 ID |
| AUTHOR_NAME | VARCHAR(N) | FALSE | 저자명 |
BOOK_SALES 각 도서의 날짜 별 판매량 정보 테이블
| Column name | Type | Nullable | Description |
|---|---|---|---|
| BOOK_ID | INTEGER | FALSE | 도서 ID |
| SALES_DATE | DATE | FALSE | 판매일 |
| SALES | INTEGER | FALSE | 판매량 |
SELECT BOOK_ID, count(SALES)
FROM BOOK_SALES
WHERE SALES_DATE like '2022-01%'
GROUP BY BOOK_IDTOTAL_SALES = 판매량 * 판매가
SELECT PRICE * count(SALES) as TOTAL_SALES
SELECT AUTHOR_ID, AUTHOR_NAME, CATEGORY, TOTAL_SALESORDER BY AUTHOR_ID, CATEGORY descSELECT AUTHOR_ID, AUTHOR_NAME, CATEGORY, TOTAL_SALES
FROM AUTHOR
NATURAL JOIN (SELECT BOOK_ID, CATEGORY, AUTHOR_ID, CNTSALES * price as TOTAL_SALES
FROM BOOK
NATURAL JOIN (SELECT BOOK_ID, SUM(SALES) as CNTSALES
FROM BOOK_SALES
WHERE SALES_DATE like '2022-01%'
GROUP BY BOOK_ID) as SUB) as TOTAL
ORDER BY AUTHOR_ID, CATEGORY descSELECT AUTHOR_ID, AUTHOR_NAME, CATEGORY, SUM(SALES * PRICE) as TOTAL_SALES
FROM BOOK_SALES as BS
NATURAL JOIN BOOK as B
NATURAL JOIN AUTHOR as A
WHERE BS.SALES_DATE like '2022-01%'
GROUP BY AUTHOR_ID, CATEGORY
ORDER BY AUTHOR_ID, CATEGORY descSELECT CATEGORY, SUM(SALES) as TOTAL_SALES
FROM BOOK as B
NATURAL JOIN BOOK_SALES as BS
WHERE SALES_DATE like '2022-01%'
GROUP BY CATEGORY
ORDER BY CATEGORYCAR_RENTAL_COMPANY_RENTAL_HISTORY 자동차 대여 기록 정보 테이블HISTORY_ID 자동차 대여 기록 IDCAR_ID 자동차 IDSTART_DATE 대여 시작일, DATEEND_DATE 대여 종료일, DATE대여중 / 대여 가능SELECT CAR_ID,
(CASE WHEN CAR_ID IN (SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '2022-10-16' BETWEEN DATE_FORMAT(START_DATE, '%Y-%m-%d') AND DATE_FORMAT(END_DATE, '%Y-%m-%d'))
THEN '대여중'
ELSE '대여 가능'
END) as AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID descAPPOINTMENT 종합병원의 진료 예약정보 테이블APNT_YMD 진료예약일시, TIMESTAMPAPNT_NO 진료예약번호PT_NO 환자번호MCDP_CD 진료과코드MDDR_ID 의사ID,APNT_CNCL_YN 예약취소여부, NULLAPNT_CNCL_YMD예약취소날짜, NULL, DATESELECT MCDP_CD, COUNT(*) as 5월예약건수
FROM APPOINTMENT
WHERE APNT_YMD like '2022-05%'
GROUP BY MCDP_CD
ORDER BY 5월예약건수, MCDP_CDSELECT CAR_TYPE, COUNT(*) as CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS like '%통풍시트%' or OPTIONS like '%열선시트%' or OPTIONS like '%가죽시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPESELECT MONTH(START_DATE) as MONTH, CAR_ID, COUNT(*) as RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10'
AND CAR_ID IN (SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE, '%Y-%m') BETWEEN '2022-08' AND '2022-10'
GROUP BY CAR_ID
HAVING COUNT(*) >= 5)
GROUP BY MONTH, CAR_ID
HAVING RECORDS > 0
ORDER BY MONTH, CAR_ID descFIRST_HALF 아이스크림 가게의 상반기 주문 정보 테이블SHIPMENT_ID 출하 번호FLAVOR 아이스크림 맛, pkTOTAL_ORDER 총주문량ICECREAM_INFO 아이스크림 성분 정보 테이블FLAVOR 아이스크림 맛, pk, 외래키INGREDIENT_TYPE 아이스크림의 성분 타입 (sugar_based, fruit_based)SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) as TOTAL_ORDER
FROM FIRST_HALF
NATURAL JOIN ICECREAM_INFO
GROUP BY INGREDIENT_TYPE
ORDER BY TOTAL_ORDERFOOD_PRODUCT 식품 정보 테이블
| Column name | Type | Nullable |
|---|---|---|
| PRODUCT_ID | VARCHAR(10) | FALSE |
| PRODUCT_NAME | VARCHAR(50) | FALSE |
| PRODUCT_CD | VARCHAR(10) | TRUE |
| CATEGORY | VARCHAR(10) | TRUE |
| PRICE | NUMBER | TRUE |
SELECT CATEGORY, PRICE as MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY, PRICE) IN (SELECT CATEGORY, MAX(PRICE)
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY)
ORDER BY MAX_PRICE descORDER BY ANIMAL_TYPE
// 'C'at > 'D'ogSELECT ANIMAL_TYPE, COUNT(*) as count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
HAVING ANIMAL_TYPE = 'Cat' or ANIMAL_TYPE = 'Dog'
ORDER BY ANIMAL_TYPE = 'Cat' descSELECT A.NAME, COUNT(*) as COUNT
FROM ANIMAL_INS A
WHERE A.NAME IN (SELECT B.NAME
FROM ANIMAL_INS B
WHERE A.ANIMAL_ID != B.ANIMAL_ID)
GROUP BY NAME
ORDER BY NAMESELECT NAME, COUNT(NAME) as COUNT
//COUNT(*) 하면 오답
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT > 1
ORDER BY NAMEUSER_INFO 의류 쇼핑몰에 가입한 회원 정보 테이블USER_ID 회원 IDGENDER 성별, NULL, 0남자 1여자AGE 나이, NULLJOINED 가입일, DATEONLINE_SALE 테이블ONLINE_SALE_ID 온라인 상품 판매 IDUSER_ID 회원 IDPRODUCT_ID 상품 IDSALES_AMOUNT 판매량SALES_DATE 판매일SELECT YEAR(SALES_DATE) as YEAR, MONTH(SALES_DATE) as MONTH, GENDER, COUNT(USER_ID) as USERS
FROM USER_INFO
NATURAL JOIN ONLINE_SALE
GROUP BY YEAR, MONTH, GENDER
HAVING GENDER is not null
ORDER BY YEAR, MONTH, GENDERSELECT YEAR(SALES_DATE) as YEAR, MONTH(SALES_DATE) as MONTH, GENDER, COUNT(distinct USER_ID) as USERS
FROM USER_INFO
NATURAL JOIN ONLINE_SALE
GROUP BY YEAR, MONTH, GENDER
HAVING GENDER is not null //where절이어도 된다!
ORDER BY YEAR, MONTH, GENDERANIMAL_OUTS 동물 보호소에서 입양 보낸 동물의 정보 테이블ANIMAL_ID 동물의 아이디ANIMAL_TYPE 생물 종DATETIME 입양일NAME 이름, NULLSEX_UPON_OUTCOME 성별 및 중성화 여부SELECT HOUR(DATETIME) as HOUR, COUNT(*) COUNT
FROM ANIMAL_OUTS
WHERE DATE_FORMAT(DATETIME, '%H:%i') BETWEEN '09:00' AND '19:59'
GROUP BY HOUR
ORDER BY HOUR//같은 기능
WHERE HOUR(DATETIME) BETWEEN 0 AND 23
WHERE DATE_FORMAT(DATETIME, '%H') BETWEEN '0' AND '23'SELECT HOUR(DATETIME) as HOUR, count(*)
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 0 AND 23
GROUP BY HOUR
ORDER BY HOURSET @hour := -1;
SELECT (@hour := @hour + 1) as HOUR, (SELECT COUNT(*)
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) = @hour) as COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23:= 대입 연산자 / = 비교 연산자GROUP BY 절을 사용할 때, COUNT(*)의 결과가 0이 되는 경우는 없다.PRODUCT 의류 쇼핑몰에서 판매중인 상품들의 정보 테이블PRODUCT_ID 상품 IDPRODUCT_CODE 상품코드, pk, 8자리 (카테고리코드 2자리 + 6자리)PRICE 판매가SELECT FORMAT(PRICE / 10000, '%F') PRICE_GROUP
FROM PRODUCT
ORDER BY PRICE_GROUPFLOOR()ROUND(123.456, 0) → 0CEIL()TRUNCATE(123.456, 0) → 0SELECT PRICE_GROUP, COUNT(*) PRODUCTS
FROM (SELECT *, FLOOR(PRICE/10000)*10000 PRICE_GROUP
FROM PRODUCT) as P2
GROUP BY PRICE_GROUP
ORDER BY PRICE