SELECT u.user_id,
u.nickname,
sum(b.price) TOTAL_SALES
from used_goods_board b join used_goods_user u on b.writer_id = u.user_id
where b.status like 'DONE'
group by 1,2
having TOTAL_SALES >= 700000
order by 3
생각해 볼 포인트
1.join의 매개변수를 어떤 컬럼으로 지정할 것인가? ( 컬럼 값 확인 필요)
값 확인 결과 user_id와 writer_id가 동일한 것을 볼 수 있었음.
2.총금액의 제한을 어떻게 둘 것인가? (where절에서는 sum함수 적용 x)
having절을 활용하여 select에 지정해 놓은 컬럼으로 불러오기 가능
(where > select > having 순으로 조건 작용)
having문의 사용과 조건적용 순서에 대한 이해가 필요한 문제였다.
https://school.programmers.co.kr/learn/courses/30/lessons/131530#qna
SELECT case when (price%10000) < 0 then 0
else truncate(price,-4)
end PRICE_GROUP,
count(*) Products
from product
group by 1
order by 1
생각해 볼 포인트
1. 가격대 설정을 어떻게 진행 할 것인가?
일일이 만원 단위로 자르기에는 양이 너무 방대해진다.
만약 10만원대 상품이 있다면, 0부터 10만원까지의 긴 쿼리가 작성된다.
이 경우는 효율성에 문제가 발생하게 된다.
따라서 '만원대'를 어떻게 표현할 것인가에 대한 고민이 필요했다.
하지만 case when문을 활용하여 일일이 범주를 나누는 것 외에는 스스로 생각나는 방법이 없었다. 검색 및 질문하기를 이용하였다.
자릿수를 버림하여 가격대를 구분하는 아주아주 컴펙한 방법을 알게 되었다. 그러나 역시 이 부분에 대해서도 이해가 잘 되지 않았다.
그렇게 해서 어떻게 가격대가 구분되는거지? 일단 사용하고, 다음번에 다시 풀어봐야 할 것 같다. 이해가 되지 않는 중!
SELECT member_id,
member_name,
gender,
date_format(date_of_birth,'%Y-%m-%d') DATE_OF_BIRTH
from member_profile
where date_of_birth like '%-03-%'
and gender = 'W'
and tlno is not null
order by 1
조건이 3종류나 되는 문제였다.
1. 생일을 어떻게 지정 할 것인지
2. 성별은 어떻게 지정 할 것인지
3. 전화번호가 null값이 아닌 사람들은 어떻게 지정할 것인지
where절에서 각 조건문을 만족시킬 수 있었고, and로 묶어 전체 조건을 만족하는 구문을 작성하였다.
특히 생일컬럼의 데이터의 구성요소를 파악할 필요가 있어, 완성 쿼리를 작성하기 이전에 조회하여 포맷을 파악하고, 필요한 부분을 사용해주었다.
전체적으로 필요한 조건을 설정하는 방법만 인지하고 있다면 풀이 난이도가 높은 문제는 아니었다.
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 1 desc
중복을 어떻게 제거할 것인지에 대한 고민이 필요했다.
select 구문에서 distinct를 활용하면 출력 시 중복값이 제거되는 함수를 활용했다.
다른 방법으로, group by절을 통해 값을 범주화시켜 중복값을 제거하는 방법도 있었다.
이 외의 조건은 where절에서 모두 간편하게 처리가 가능했다.
쉬어가는 문제였다.
SELECT *
from animal_ins
order by animal_id
모든 레코드를 조회하는 방법이 select *이라는 것만 알고 있으면 쉽게 풀 수 있었다.
https://school.programmers.co.kr/learn/courses/30/lessons/131123#qna
SELECT a.food_type,
a.rest_id,
a.rest_name,
a.favorites
from rest_info a
join
(select food_type,
rest_id,
rest_name,
max(favorites)f
from rest_info
group by food_type)b
on a.favorites = b.f
group by food_type
order by food_type desc
이전에도 비슷한 조건을 필요로 하는 문제가 있었는데, 그때보다 더 복잡한 느낌이었다.
특정 쿼리에 max값을 주어 출력해야하는데, 이때 다른 행도 그 값에 맞는 정보가 출력이 되어야 한다. 그러나 각각의 max값이 다르기 때문에, 통일된 기준을 주어야 할 필요가 있었다.
self join 방법을 이용해 풀이할 수 있었다.
메인쿼리에 from컬럼을 a로, 서브쿼리에 from컬럼을 b로 놓고 조인을 시도한다.
이때 서브쿼리에서 필요한 조건을 지정하고, 공통된 컬럼으로 묶어주면 된다.
나는 조건값이 출력되어야 한다는 생각에 max값을 준 컬럼을 기준으로 묶었다.
다른 기준으로 공통변수를 설정해도 문제가 발생하지는 않는다.