
SELECT i.ANIMAL_ID, i.NAME
from ANIMAL_INS i
inner join ANIMAL_OUTS o on i.animal_id = o.animal_id
where datediff(o.datetime, i.datetime)
order by datediff(o.datetime, i.datetime) desc
limit 2
datediff를 사용하여 날짜의 사이값을 구했다.ditediff(날짜1, 날짜2)
기본적으로 날짜1 - 날짜2 로 계산된다.
정렬 조건으로도 사용 할 수 있다~!

SELECT u.user_id, u.nickname, sum(b.price) as TOTAL_SALES
from USED_GOODS_BOARD b join USED_GOODS_USER u on b.writer_id = u.user_id
where b.status = 'done'
group by u.nickname
order by total_sales
where절에 조건을 추가하면 2명만 조회된다.WHERE절에서 b.price >= 700000 조건을 추가하면, 개별 거래(USED_GOODS_BOARD의 price 컬럼)가 70만 원 이상인 경우에만 결과에 포함되기 때문이다.HAVING 절을 사용하여 그룹화된 결과의 총 거래금액에 대한 조건을 지정할 수 있다.HAVING 절은 GROUP BY 절의 결과에 조건을 적용할 때 사용된다. group by 에서도 u.nickname만 아니라 u.user_id를 함께 사용하는 것이 안전하다.SELECT u.user_id, u.nickcame, sum(b.price) as TOTAL_SALES
from USED_GOODS_BOARD b join USED_GOODS_USER u on b.writer_id = u.user_id
where b.status = 'done'
group by u.nickname, u.user_id
having sum(b.price) >= 700000
order by total_sales

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 h.start_date like '____-10-__%' and c.car_type = '세단'
order by 1 desc
MONTH(h.START_DATE) = 10 //이렇게도 가능하다.
처음에는 DISTINCT가 아닌 group by를 사용했다. 결과는 맞는 것 같았으나 계속 정답으로 인정되지 않아 찾아봤다.
중복을 제거하기 위한 의도로 GROUP BY를 사용하는 것보다 DISTINCT 키워드를 사용하는 것이 더 적절하다고 한다.
GROUP BY와 DISTINCT는 비슷해 보일 수 있지만, 사용 목적과 작동 방식에서 중요한 차이가 있다.
DISTINCT는 선택된 컬럼들에서 중복된 값을 제거하는 데 사용된다.SELECT DISTINCT column1, column2 FROM table;
와 같이 사용되며, column1과 column2의 조합에서 중복을 제거한다.
이렇듯 DISTINCT는 단순히 결과 집합에서 중복을 제거할 목적으로 사용된다.
GROUP BY는 집계 함수(SUM, COUNT, AVG 등)와 함께 사용되어, 특정 컬럼을 기준으로 그룹화하고 각 그룹에 대해 집계를 수행한다.예를 들어,
SELECT column, COUNT(*) FROM table GROUP BY column;
과 같이 사용되어, column의 각 고유값에 대한 레코드 수를 계산한다.
GROUP BY는 결과 집합을 특정 기준으로 그룹화하고, 그룹별로 집계 함수를 적용할 때 사용된다.DISTINCT가 더 명확한 결과를 도출할 수 있다.중복을 제거하는 것이 주 목적이라면 DISTINCT를 사용하고
그룹별 집계를 목적으로 할 때는 GROUP BY를 사용 하자