개발자는 기록이 답이다

프로그래머스 SQL 76문제 풀기 ( 정답률 높은 순 기준 20개 ) - 3 본문

Database/프로그래머스

프로그래머스 SQL 76문제 풀기 ( 정답률 높은 순 기준 20개 ) - 3

slow-walker 2023. 10. 4. 05:30

 

LV.2 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (정답률 : 86%) 🌟🌟 정규 표현식 가능

https://school.programmers.co.kr/learn/courses/30/lessons/151137

한개의 칼럼에 데이터가 ,로 여러개가 들어있을경우 %%로 가져오기

SELECT CAR_TYPE, COUNT(CAR_TYPE) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%열선시트%' OR OPTIONS LIKE '%통풍시트%' OR OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE;

REGEXP_LIKE(칼럼명, '문자열패턴')도 사용가능

SELECT CAR_TYPE,
    COUNT(CAR_TYPE) AS CASRS
FROM CAR_RENTAL_COMPANY_CAR
WHERE REGEXP_LIKE(OPTIONS, '통풍시트|열선시트|가죽시트')
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC;

REGEXP_LIKE 함수는 정규 표현식을 사용하여 문자열에 패턴 매칭을 수행한다.

occupation 열의 값이 "^Manager" 패턴과 일치하는지 확인합니다. "^"는 문자열이 "Manager"로 시작하는지 나타내는 정규 표현식 메타 문자 중 하나이다. 복잡한 문자열 패턴을 검색하거나 데이터의 패턴을 분석할 때 매우 유용하다.

// REGEXP_LIKE 예시
SELECT *
FROM EMPLOYEE
WHERE REGEXP_LIKE(occupation, '^Manager');

LV.2 상품 별 오프라인 매출 구하기 (정답률 : 86%) 🌟

https://school.programmers.co.kr/learn/courses/30/lessons/131533

매출액(판매가*판매랑)이 아니고 매출액(판매가*판매랑)의 합계라서 SUM이 필요하다.

문제 제대로 읽자..

SELECT p.PRODUCT_CODE, SUM(p.PRICE *os.SALES_AMOUNT) AS SALES
FROM PRODUCT p 
JOIN OFFLINE_SALE os ON p.PRODUCT_ID = os.PRODUCT_ID
GROUP BY p.PRODUCT_CODE
ORDER BY SALES DESC, PRODUCT_CODE ASC;

 

LV.3 있었는데요 없었습니다 (정답률 : 85%)

https://school.programmers.co.kr/learn/courses/30/lessons/59043

SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.DATETIME > O.DATETIME
ORDER BY I.DATETIME ASC;

 

LV.3 카테고리별 도서 판매량 집계하기 (정답률 : 85%)

https://school.programmers.co.kr/learn/courses/30/lessons/144855

 

카테고리 별로 - GROUP BY CATEGORY

도서 판매랴을 합산, 판매량 집계 - SUM(SALES))

SELECT CATEGORY, SUM(SALES) AS TOTAL_SALES
FROM BOOK B JOIN BOOK_SALES BS
ON B.BOOK_ID = BS.BOOK_ID
WHERE BS.SALES_DATE LIKE '2022-01%'
GROUP BY B.CATEGORY
ORDER BY CATEGORY;
SELECT  B.CATEGORY
        , SUM(SALES) AS TOTAL_SALES
FROM    BOOK B
        , BOOK_SALES BS
WHERE   B.BOOK_ID = BS.BOOK_ID
  AND   BS.SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31'
GROUP BY B.CATEGORY
ORDER BY B.CATEGORY ASC

 

 

 

LV.3 오랜 기간 보호한 동물(2) (정답률 : 85%) 🌟🌟🌟

https://school.programmers.co.kr/learn/courses/30/lessons/59411

보호기간이 가장 길었던 동물 쿼리를 작성해야 하는데, ORDER BY에서 -가 되는거 처음 알았다.

저것 대신 TIMESTAMPDIFF함수를 사용할 수도 있다. 가장 길었던거는 차이를 계산하고 DESC로 알 수 있다.

 

TIMESTAMPDIFF : 두 날짜 또는 시간 간의 차이를 계산하는 데 사용되는 함수

TIMESTAMPDIFF(unit, start_date, end_date)

--

`unit`: 차이를 계산할 때 사용할 시간 단위를 나타내는 문자열입니다.
         예를 들어, 'SECOND', 'MINUTE', 'HOUR', 'DAY', 'MONTH', 'YEAR' 등이 될 수 있습니다.
         이 단위에 따라 결과가 다르게 반환됩니다.
`start_date`: 차이를 계산하기 시작하는 날짜 또는 시간입니다.
`end_date`: 차이를 계산을 끝내는 날짜 또는 시간입니다.


예를 들어, 두 날짜 간의 차이를 초,분,시간,일,월 단위로 계산하려면 다음과 같이 사용할 수 있습니다.

SELECT 
TIMESTAMPDIFF(SECOND, '2023-10-04 10:00:00', '2023-10-05 10:00:00') AS SECOND,
TIMESTAMPDIFF(MINUTE, '2023-10-04 10:00:00', '2023-10-05 10:00:00') AS MINUTE,
TIMESTAMPDIFF(HOUR, '2023-10-04 10:00:00', '2023-10-05 10:00:00') AS HOUR,
TIMESTAMPDIFF(DAY, '2023-10-04 10:00:00', '2023-10-05 10:00:00') AS DAY,
TIMESTAMPDIFF(MONTH, '2023-10-04 10:00:00', '2023-10-05 10:00:00') AS MONTH;

## 마이너스 연산자
    SELECT INS.ANIMAL_ID, INS.NAME
    FROM ANIMAL_INS INS JOIN ANIMAL_OUTS OUTS
    ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
    ORDER BY OUTS.DATETIME - INS.DATETIME DESC LIMIT 2;
--
## TIMESTAMPDIFF함수
    SELECT i.ANIMAL_ID, i.NAME
    FROM ANIMAL_INS i JOIN ANIMAL_OUTS o 
    ON i.ANIMAL_ID = o.ANIMAL_ID
    ORDER BY TIMESTAMPDIFF(SECOND,i.DATETIME,o.DATETIME) DESC
    limit 2;
--
## DATEDIFF함수
    SELECT i.ANIMAL_ID, i.NAME
    FROM ANIMAL_INS i JOIN ANIMAL_OUTS o 
    ON i.ANIMAL_ID = o.ANIMAL_ID
    ORDER BY DATEDIFF(o.DATETIME,i.DATETIME) DESC
    limit 2;
SELECT *
FROM 
(
    SELECT INS.ANIMAL_ID, INS.NAME
    FROM ANIMAL_INS INS
    JOIN ANIMAL_OUTS OUTS
    ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
    ORDER BY TIMESTAMPDIFF(SECOND, INS.DATETIME, OUTS.DATETIME) DESC
) a
LIMIT 2;

 

LV.4 보호소에서 중성화한 동물 (정답률 : 85%) 🌟🌟

https://school.programmers.co.kr/learn/courses/30/lessons/59045

보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물을 찾을때

WHERE에 길게 작성해도 되지만, != 나 not like로 빠르게 해결할 수 있다.

SELECT INS.ANIMAL_ID, INS.ANIMAL_TYPE, INS.NAME
FROM ANIMAL_INS INS JOIN ANIMAL_OUTS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE INS.SEX_UPON_INTAKE LIKE 'Intact%' AND (OUTS.SEX_UPON_OUTCOME LIKE 'Spayed%' OR OUTS.SEX_UPON_OUTCOME LIKE 'Neutered%')
ORDER BY ANIMAL_ID;
SELECT INS.ANIMAL_ID, INS.ANIMAL_TYPE, INS.NAME
FROM ANIMAL_INS INS JOIN ANIMAL_OUTS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE INS.SEX_UPON_INTAKE != OUTS.SEX_UPON_OUTCOME
ORDER BY ANIMAL_ID;
SELECT a.ANIMAL_ID, a.ANIMAL_TYPE, a.NAME
FROM ANIMAL_INS a join ANIMAL_OUTS b
on a.ANIMAL_ID = b.ANIMAL_ID
WHERE a.SEX_UPON_INTAKE like 'Intact%' and b.SEX_UPON_OUTCOME not like 'Intact%'
ORDER BY a.ANIMAL_ID;

 

 

LV.2 조건에 맞는 도서와 저자 리스트 출력하기 (정답률 : 85%)

https://school.programmers.co.kr/learn/courses/30/lessons/144854

DATA_FORMAT대신 TO_CHAR()함수를 써도 된다.

SELECT B.BOOK_ID, A.AUTHOR_NAME, DATE_FORMAT(B.PUBLISHED_DATE,'%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK B JOIN AUTHOR A
ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE B.CATEGORY = '경제'
ORDER BY B.PUBLISHED_DATE;
SELECT b.BOOK_ID AS BOOK_ID, a.AUTHOR_NAME AS AUTHOR_NAME,
TO_CHAR(b.PUBLISHED_DATE, 'yyyy-mm-dd') AS PUBLISHED_DATE
FROM BOOK b JOIN AUTHOR a
ON b.AUTHOR_ID = a.AUTHOR_ID
WHERE b.CATEGORY = '경제'
ORDER BY PUBLISHED_DATE;

 

LV.3 조건별로 분류하여 주문상태 출력하기 (정답률 : 84%) 🌟🌟🌟

https://school.programmers.co.kr/learn/courses/30/lessons/131113

5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력!!! 

SELECT ORDER_ID, 
       PRODUCT_ID, 
       DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE,
       CASE 
        WHEN DATEDIFF(OUT_DATE, '2022-05-01') <= 0 THEN '출고완료'
        WHEN DATEDIFF(OUT_DATE, '2022-05-01') > 0 THEN '출고대기'
        ELSE '출고미정' END AS 출고여부
FROM FOOD_ORDER
ORDER BY ORDER_ID
SELECT ORDER_ID, 
       PRODUCT_ID, 
       DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE,
       CASE 
        WHEN OUT_DATE <= '2022-05-01' THEN '출고완료'
        WHEN OUT_DATE > '2022-05-01' THEN '출고대기'
        ELSE '출고미정' END AS 출고여부
FROM FOOD_ORDER
ORDER BY ORDER_ID

`DATEDIFF` 함수 : 두 날짜 간의 일(day) 차이를 계산하는 함수입니다. 이 함수는 하나의 날짜로부터 다른 날짜까지의 일(day) 수를 반환합니다. `DATEDIFF` 함수의 일반적인 사용법은 다음과 같습니다:

DATEDIFF(end_date, start_date)



- `end_date`: 차이를 계산하는 대상 날짜 중 하나입니다. 종료 날짜(end date)로 사용됩니다.
- `start_date`: 차이를 계산하는 대상 날짜 중 하나입니다. 시작 날짜(start date)로 사용됩니다.

`DATEDIFF` 함수는 `end_date`에서 `start_date`를 뺀 다음, 결과를 일(day) 단위로 반환합니다. 만약 `end_date`가 `start_date`보다 이후인 경우 양수를 반환하며, `end_date`가 `start_date`보다 이전인 경우 음수를 반환합니다. 두 날짜가 동일한 경우 0을 반환합니다.

SELECT DATEDIFF('2023-10-10', '2023-10-01') AS DAY_DIFFERENCE;



이 쿼리는 '2023-10-10'과 '2023-10-01' 사이의 일(day) 차이를 계산하고, `DAY_DIFFERENCE`라는 별칭으로 결과를 반환합니다. 결과로는 9가 반환됩니다.

 

LV.2 루시와 엘라 찾기 (정답률 : 84%)

https://school.programmers.co.kr/learn/courses/30/lessons/59046

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')

 

LV.2 성분으로 구분한 아이스크림 총 주문량(정답률 : 83%) 🌟

https://school.programmers.co.kr/learn/courses/30/lessons/133026

성분 타입에 대한 아이스크림 총 주문량! GROUP BY , SUM

SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF F JOIN ICECREAM_INFO I
ON F.FLAVOR = I.FLAVOR
GROUP BY I.INGREDIENT_TYPE
ORDER BY `TOTAL_ORDER` ASC;

 

LV.3 조건에 맞는 사용자와 총 거래금액 조회하기(정답률 : 83%) 🌟🌟🌟

https://school.programmers.co.kr/learn/courses/30/lessons/164668

 

HAVING 절은 집계 함수를 사용한 결과에 조건을 적용하는데 사용

WHERE 절에서 집계 함수로 생성된 별칭인 TOTAL_SALES을 직접 사용하는 것은 일반적으로 허용되지 않습니다. 이유는 WHERE 절은 데이터를 필터링하는 단계이며, 그 단계에서는 집계 함수의 결과인 TOTAL_SALES 값을 사용할 수 없습니다. 집계 함수는 GROUP BY와 함께 사용되며, HAVING 절에서 집계 함수 결과를 필터링하는 것이 일반적인 방법입니다.

따라서 TOTAL_SALES를 WHERE 절에서 직접 사용하는 대신, HAVING 절에서 필터링하도록 수정하는 것이 올바른 접근입니다

SELECT uu.USER_ID, uu.NICKNAME, SUM(ub.PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD ub JOIN USED_GOODS_USER uu
ON ub.WRITER_ID = uu.USER_ID
WHERE ub.STATUS = 'DONE'
GROUP BY ub.WRITER_ID
HAVING TOTAL_SALES >= 700000
ORDER BY TOTAL_SALES ASC;

 

LV.1 조건에 맞는 도서 리스트 출력하기(정답률 : 82%) 🌟

https://school.programmers.co.kr/learn/courses/30/lessons/144853

SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK
WHERE CATEGORY = '인문' AND PUBLISHED_DATE LIKE '2021%'
ORDER BY PUBLISHED_DATE;

 

 

LV.2 가격대 별 상품 개수구하기(정답률 : 82%) 🌟🌟🌟

https://school.programmers.co.kr/learn/courses/30/lessons/131530

case when 다중조건 걸때 THEN 0하고 ','넣지말아라!!!!!!

그리고 나는 꽤 무식하게 풀었는데.. TRUNCATE사용하면 알아서 만원단위로 잘라준다..PRICE를 뒤에서부터 4개 삭제

SELECT CASE WHEN PRICE < 10000 THEN 0
            WHEN PRICE >= 10000 AND PRICE < 20000 THEN 10000
            WHEN PRICE >= 20000 AND PRICE < 30000 THEN 20000
            WHEN PRICE >= 30000 AND PRICE < 40000 THEN 30000
            WHEN PRICE >= 40000 AND PRICE < 50000 THEN 40000
            WHEN PRICE >= 50000 AND PRICE < 60000 THEN 50000
            WHEN PRICE >= 60000 AND PRICE < 70000 THEN 60000
            WHEN PRICE >= 70000 AND PRICE < 80000 THEN 70000
            WHEN PRICE >= 80000 AND PRICE < 90000 THEN 80000
            END AS PRICE_GROUP,
            COUNT(PRICE) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP;
SELECT CASE WHEN PRICE < 10000 THEN 0
            ELSE TRUNCATE(PRICE, -4)
            END AS PRICE_GROUP,
            COUNT(PRICE) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP;

truncate사용하면 case when 사용 안해도 된다

SELECT TRUNCATE(PRICE, -4) AS PRICE_GROUP, COUNT(PRICE) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP;
SELECT  FLOOR(PRICE/10000)*10000 AS PRICE_GROUP
        , COUNT(*) AS PRODUCTS
  FROM  product
 GROUP 
    BY  PRICE_GROUP
 ORDER
    BY  PRICE_GROUP ASC

FLOOR는 아래 참고링크 첫번째꺼

TRUNCATE 테스트

SELECT TRUNCATE(33210, -4) AS PRICE_GROUP
FROM PRODUCT;
// 30000 뒤에서부터 4개 제거

SELECT TRUNCATE(33210, -3) AS PRICE_GROUP
FROM PRODUCT;
// 33000 뒤에서부터 3개 제거

SELECT TRUNCATE(33210, -2) AS PRICE_GROUP
FROM PRODUCT;
// 33200  뒤에서부터 2개 제거

SELECT TRUNCATE(33210.123, 1) AS PRICE_GROUP
FROM PRODUCT;
// 33210.1 소수점 1개만 보여주겠다

SELECT TRUNCATE(33210.123, 2) AS PRICE_GROUP
FROM PRODUCT;
// 33210.12 소수점 2개만 보여주겠다

 

 

LV.2 3월에 태어난 여성 회원 목록 출력하기 (정답률 : 82%) 🌟

https://school.programmers.co.kr/learn/courses/30/lessons/131120

여성인것도 조건절 잊지말자!

SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE DATE_OF_BIRTH LIKE '%-03-%' AND TLNO IS NOT NULL AND GENDER = 'W'
ORDER BY MEMBER_ID;
SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE MONTH(DATE_OF_BIRTH)=3
      AND TLNO IS NOT NULL
      AND GENDER ='W'
ORDER BY MEMBER_ID;

 

LV.1 평균 일일 대여 요금 구하기 (정답률 : 81%) 🌟

https://school.programmers.co.kr/learn/courses/30/lessons/151136

 

SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';

 

LV.3 즐겨찾기가 가장 많은 식당 정보 출력하기 (정답률 : 81%) 🌟🌟🌟🌟🌟 서브쿼리!

SELECT 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 desc;

딱 내 상황에 대한 블로그 포스팅이있어서 바로 링크를 붙이고자 한다. 

https://coduking.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-SQL-%EC%A6%90%EA%B2%A8%EC%B0%BE%EA%B8%B0%EA%B0%80-%EA%B0%80%EC%9E%A5-%EB%A7%8E%EC%9D%80-%EC%8B%9D%EB%8B%B9-%EC%A0%95%EB%B3%B4-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0

 

[프로그래머스 SQL] 즐겨찾기가 가장 많은 식당 정보 출력하기

정답코드 SELECT 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 desc; 설명 아마도 이 글을 클릭 한 사람이라면

coduking.com

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM rest_info
WHERE favorites IN (SELECT max(favorites)
                                FROM REST_INFO
                                GROUP BY FOOD_TYPE)
GROUP BY FOOD_TYPE
ORDER BY food_type desc;

 

LV.3 대여 기록이 존재하는 자동차 리스트 구하기 (정답률 : 80%) 🌟🌟🌟 서브쿼리도 사용  가능!

https://school.programmers.co.kr/learn/courses/30/lessons/157341

 

SELECT DISTINCT(c.CAR_ID)
FROM CAR_RENTAL_COMPANY_CAR c JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY h
ON c.CAR_ID = h.CAR_ID
WHERE c.CAR_TYPE = '세단' AND h.START_DATE Like '%-10-%'
ORDER BY c.CAR_ID DESC;
SELECT DISTINCT(C.CAR_ID)
FROM CAR_RENTAL_COMPANY_CAR AS C 
INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS H ON C.CAR_ID = H.CAR_ID
WHERE CAR_TYPE = '세단' AND MONTH(START_DATE)=10
ORDER BY CAR_ID DESC

서브 쿼리 이용

SELECT DISTINCT(CAR_ID)
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) = 10
	AND CAR_ID IN (
		SELECT CAR_ID
		FROM CAR_RENTAL_COMPANY_CAR
		WHERE CAR_TYPE = '세단'
	)
ORDER BY CAR_ID DESC
// distinct대신 group by사용
SELECT A.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR AS A
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS B
ON A.CAR_ID = B.CAR_ID
WHERE A.CAR_TYPE = '세단'
    AND DATE_FORMAT(B.START_DATE, '%m') = '10'
GROUP BY CAR_ID
ORDER BY CAR_ID DESC

 

 

LV.4 5월 식품들의 총매출 조회하기(정답률 : 80%) 🌟

SELECT p.PRODUCT_ID, p.PRODUCT_NAME, SUM(p.PRICE * o.AMOUNT) AS TOTAL_SALES
FROM FOOD_PRODUCT p JOIN FOOD_ORDER o
on p.PRODUCT_ID = o.PRODUCT_ID
WHERE YEAR(o.PRODUCE_DATE) = 2022 AND MONTH(o.PRODUCE_DATE) = 5
GROUP BY p.PRODUCT_ID
ORDER BY TOTAL_SALES DESC, p.PRODUCT_ID

 

LV.4 식품분류별 가장 비싼 식품의 정보 조회하기(정답률 : 80%) 🌟🌟🌟🌟🌟 서브쿼리!

SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (PRICE, CATEGORY) IN (
    SELECT MAX(PRICE), CATEGORY
    FROM FOOD_PRODUCT
    GROUP BY CATEGORY
)
AND CATEGORY IN ('과자', '국', '김치', '식용유')
ORDER BY MAX_PRICE DESC;
SELECT CATEGORY,PRICE as MAX_PRICE,	PRODUCT_NAME
from FOOD_PRODUCT
where price in (
    select max(price)
    from FOOD_PRODUCT
    group by CATEGORY)
and CATEGORY In ('과자', '국', '김치','식용유')
order by MAX_PRICE desc

LV.3 없어진 기록 찾기(정답률 : 80%) 🌟🌟🌟 RIGHT OUTER JOIN!

B테이블에는 있고 A테이블에는 없는거 조회

SELECT o.ANIMAL_ID, o.NAME
FROM ANIMAL_INS i RIGHT OUTER JOIN ANIMAL_OUTS o
ON i.ANIMAL_ID = o.ANIMAL_ID
WHERE i.DATETIME IS NULL
SELECT category, price AS max_price, product_name
FROM food_product
WHERE (category,price) IN (
    SELECT category, MAX(price) AS max_price
    FROM food_product
    WHERE category IN ('과자', '국', '김치', '식용유')
    GROUP BY category
)
ORDER BY price DESC
SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
AND PRICE IN (SELECT MAX(PRICE) FROM FOOD_PRODUCT GROUP BY CATEGORY)
GROUP BY CATEGORY
ORDER BY MAX_PRICE DESC

 

 

 

 

 

 

 

참고 링크 : 

https://kkw-da.tistory.com/entry/SQL-%EA%B0%80%EA%B2%A9%EB%8C%80-%EB%B3%84-%EC%83%81%ED%92%88-%EA%B0%9C%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4MySQLLevel-2