ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 12/01
    스파르타/TIL(Today I Learned) 2023. 12. 1. 16:53

    프로그래머스_ 막힌 문제들

     

    1) 재구매가 일어난 상품의 회원 리스트 구하기

     

    문제 
    ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.

     

    문제를 읽고 든 생각은 

    동일한 상품을 재 구매한 데이터를 구하기 위하여

    user_id로 count(1)하여 갯수가 2이상인 것을 구하면 되겠다 싶어서

    서브쿼리에 이 내용을 넣고 

    서브쿼리 밖에서 where문으로 2이상의 데이터를 찾았다.

     

    select aa.user_id, aa.product_id
    from 
    (
        SELECT user_id , product_id ,count(1) cnt_order
        from online_sale
        group by 1,2
    ) aa
    where cnt_order >= 2
    order by 1,2 desc

     

    하지만 위 코드까지 구하는데 생각보다 시간이 걸렸고

    또 질문하기 탭을 눌러 사람들의 질문을

    구경하다가 새로운 것을 알아낸다

     

    바로 having이다

     

    group으로 묶은 테이블에 대하여 집계함수를 사용할 수 있는

    having은 평소 내가 많이 사용해보지 않아서 

    서브쿼리로 집계함수에 as를 붙여서 문제를 푸는 방식을 고집했다면

    이번에는 having을 써서 문제를 풀어봤다.

     

     SELECT user_id , product_id
        from online_sale
        group by 1,2
        having count(user_id) >= 2
        order by 1,2 desc

     

    having으로 그룹화 된 user_id와 product_Id를

    count로 갯수를 세어 2개 이상 = 재구매를 한 데이터를 구하고

    바로order by 를 쓰면 코드가 간결해지고 깔끔해진다.

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

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

    2)  취소되지 않은 진료 예약 조회하기

     


    문제 : 
    PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요. 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.

    이 문제는 table을 3개를 조인하여 하는 문제이다

     

    테이블을 보면 

    APPOINTMENT  테이블과 다른 두 테이블은 조인이 되지만

    DOCTOR 와 PATIENT은 서로 연결되는 데이터

    FK가 될 만한 데이터가 없어 JOIN 이 안된다.

     

    조건을 생각해보면

    조건 1 . 2022년4월 13일의 데이터가 필요

    조건 2 . 위에 날짜의 데이터가 예약 취소가 안되어 있어야 한다.

    조건 3. 진료과 코드가 CS인 데이터

     

    이렇게 3개가 필요하다

     

    하지만 이 문제는 오늘 못풀었다

    1시간 시간을 맞추고 문제는 푸는데 1시간이 지났기도 하고

    머리속에서 정리가 안되서 이 문제는 다음에 풀기로 한다.

    그 동안 여러개 JOIN하는 방법이나 찾아보려고 한다.

     

    '스파르타 > TIL(Today I Learned)' 카테고리의 다른 글

    12/08  (0) 2023.12.08
    12/07  (2) 2023.12.07
    12/6  (3) 2023.12.06
    12/5  (0) 2023.12.05
    12/4  (3) 2023.12.04
Designed by Tistory.