Q. USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 완료된 중고 거래의 총금액이
70만 원 이상인 사람의 회원 ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성해주세요.
결과는 총거래금액을 기준으로 오름차순 정렬해주세요.
(내가 쓴 답 = 오답)
SELECT b.user_id, b.nickname, sum(a.price) "TOTAL_SALES"
from used_goods_board a inner join used_goods_user b
on a.writer_id=b.user_id
where a.status = 'DONE' and sum(a.price) >= 700000
group by b.user_id
order by 3
이렇게 작성했는데 오류가 뜬다.

찾아보니 <집계함수는 where 절에 쓸 수 없다> 는 사실을 알았다‼️
(정답)
SELECT b.user_id, b.nickname, sum(a.price) "TOTAL_SALES"
from used_goods_board a inner join used_goods_user b
on a.writer_id=b.user_id
where a.status = 'DONE'
group by b.user_id
having sum(a.price) >= 700000
order by 3
Q. PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요.
이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는
각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요.
결과는 가격대를 기준으로 오름차순 정렬해주세요.
(내가 쓴 답 = 정답)
SELECT
case when price < 10000 then '0'
when price < 20000 then '10000'
when price < 30000 then '20000'
when price < 40000 then '30000'
when price < 50000 then '40000'
when price < 60000 then '50000'
when price < 70000 then '60000'
when price < 80000 then '70000'
when price < 90000 then '80000' end price_group,
count(*) products
from product
group by 1
order by 1
case when 문으로 노가다를 해서 맞추긴 했으나, 다른 사람들은 어떻게 풀었나 보다가 참신한 방법이 있어서 그분의 풀이를 가져왔다.
SELECT FLOOR(PRICE / 10000) * 10000 AS `PRICE_GROUP`,
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY `PRICE_GROUP`
ORDER BY `PRICE_GROUP`
처음엔 이게 대체 어떻게 해서 만원대로 걸러지는지 이해를 못했는데
ex) price: 16,000
price / 10,000 : 1.6
floor(1.6) = 1
1 * 10,000 = 10,000
이렇게 하나하나 풀어보니 이제야 의문이 풀렸다.
비슷하게 TRUNCATE를 사용한 풀이도 있었다.
SELECT TRUNCATE(PRICE / 10000, 0) * 10000 AS `PRICE_GROUP`,
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY `PRICE_GROUP`
ORDER BY `PRICE_GROUP`
Q. REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의
음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 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;