ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 12/11
    스파르타/TIL(Today I Learned) 2023. 12. 11. 15:55
    1251. Average Selling Price

    이 사이트의 문제를 풀 때  영어로 된 문제이다 보니

    해석하고 설명 보면서 코딩을 하는데

    설명만 보고서 코딩을 하니 오류가 나왔다.

     

    실수를 돌이켜 보면

    1. join 조건에서 product_id만 연결한 것이였다.

    실제로 주어진 예시의 테이블을 보면 group  by 로 묶어도 같은 product_id임에도

    구매날짜에 따라 다르게 계산이 되어야한다.

    이것을 고려하지 않고 코딩을 하여 첫번째 문제가 생겼다.

    join 조건에 u.purchase_date between p.start_date and p.end_date 를 추가하여 

    해결하였다.

     

    2. 바로 ifnull을 생각치도 못했다.

    일단 예시를 보면 생각 할 일이 없었기 때문이다.

    하지만 실무를 하다보면 구매를 안할 수 도 있기 때문에

    test를 통과 못한것이다.

    주어진 평균 구매가격를 구할 때 

    ifnull을 추가하여 만일 구매를 안한 고객이 있으면 0을 출력하도록 한다.

                                                 ifnull(round(sum(p.price*u.units)/sum(u.units),2),0)average_price

     

     

     

    https://leetcode.com/problems/average-selling-price/description/

     

    Average Selling Price - LeetCode

    Can you solve this real interview question? Average Selling Price - Table: Prices +---------------+---------+ | Column Name | Type | +---------------+---------+ | product_id | int | | start_date | date | | end_date | date | | price | int | +---------------

    leetcode.com

     


    문제 : 1211. Queries Quality and Percentage

    poor_query_percentage를 구하는 과정에서

    count를 써서 select 문에 

    서브쿼리를 사용해서 구하려고 했다.

    하지만 더 쉬운 풀이가 존재했다.

     

    우리는rating이 3점 미만인 갯수를 구하기 위해서

    count를 사용하려 했지만

    if문을 사용하여 쉽게 구할 수 있었다.

                                                                                 if(rating <3,1,0)을 보면
     

    rating이 3점 미만이면 1을 반환하고 그렇지 않으면 0을 반환한다.

    즉 우리가 구하려는 3점 미만의 갯수를 구하기 위해서는

    sum으로 감싸면 count를 한 것과 같은 효과를

    가지며 더욱 간단한 코드가 된다.

     

    select   query_name,
        round(avg(rating/position),2) quality 
        ,round(sum(if(rating <3,1,0)) *100 /count(*),2) poor_query_percentage
    from queries
    where query_name is not null
    group by query_name

    https://leetcode.com/problems/queries-quality-and-percentage/description/

     

    Queries Quality and Percentage - LeetCode

    Can you solve this real interview question? Queries Quality and Percentage - Table: Queries +-------------+---------+ | Column Name | Type | +-------------+---------+ | query_name | varchar | | result | varchar | | position | int | | rating | int | +------

    leetcode.com

     

     

    1193. Monthly Transactions I

     

    table을 보면 state이 enum이라서

    아! 저번에 배운 재귀함수마냥 테이블을

    불러서 두개의 조건에 따라서 하면 되겠다!

    라고 해서 코딩을 하던 중 계속 막혀서

    결국 해설을 찾아 보았다.

     

    해설에서는 두가지 방법이 있는데두가지 방법 모두 맥락은 비슷했다.

     

    # 첫번째 방법 case when 이용 , substr사용
    SELECT  SUBSTR(trans_date,1,7) as month,
        country,
        count(id) as trans_count,
        SUM(CASE WHEN state = 'approved' then 1 else 0 END) as approved_count,
        SUM(amount) as trans_total_amount,
        SUM(CASE WHEN state = 'approved' then amount else 0 END) as approved_total_amount
    FROM Transactions
    GROUP BY month, country

    case when과 substr로 

    state 별 갯수를 더하고

    amount를 구하는 방법이다

     

    #두번째 방법 date_format과 if를 사용한 방법
    SELECT
      DATE_FORMAT(trans_date, '%Y-%m') AS month,
      country,
      COUNT(*) AS trans_count,
      SUM(IF(state = 'approved', 1, 0)) AS approved_count,
      SUM(amount) AS trans_total_amount,
      SUM(IF(state = 'approved', amount, 0)) AS approved_total_amount
    FROM Transactions
    GROUP BY DATE_FORMAT(trans_date, '%Y-%m'), country;

     

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

    12/14  (0) 2023.12.14
    12/13  (0) 2023.12.13
    12/10 WIL  (0) 2023.12.10
    12/08  (0) 2023.12.08
    12/07  (2) 2023.12.07
Designed by Tistory.