SELECT
fp.product_id
, fp.product_name
, SUM(fp.price*fo.amount) AS total_sales
FROM
food_product fp
JOIN food_order fo
ON fp.product_id = fo.product_id
AND MONTH(fo.produce_date) = 5
GROUP BY
fp.product_id
, fp.product_name
ORDER BY
SUM(fp.price*fo.amount) DESC
, fp.product_id
;
ON에 조건을 넣는 것보다는 WHERE에 조건을 넣는 걸 추천
2022년이 아닌 값이 있을 수 있느니 년도 조건도 추가해야 함
SELECT
fp.product_id
, fp.product_name
, SUM(fp.price*fo.amount) AS total_sales
FROM
food_product fp
JOIN food_order fo
ON fp.product_id = fo.product_id
WHERE
YEAR(fo.product_date) = 2020
AND MONTH(fo.produce_date) = 5
GROUP BY
fp.product_id
, fp.product_name
ORDER BY
SUM(fp.price*fo.amount) DESC
, fp.product_id
;
WHERE절을 WHERE produce_date LIKE '2022-05%'
로 작성해도 됨
추가: 참고하면 좋을 쿼리
SELECT
fp.product_id
, fp.product_name
, SUM(fp.price * a.amount) AS total_sales
FROM
food_product fp
JOIN (
SELECT
product_id
, amount
FROM
food_order
WHERE
produce_date
BETWEEN STR_TO_DATE(CONCAT('2022-05', '-01'), '%Y-%m-%d')
AND LAST_DAY(STR_TO_DATE(CONCAT('2022-05', '-01'), '%Y-%m-%d'))
-- GROUP 전 해당 날짜를 가져와야 GROUP 때 다른 날짜의 AMOUNT 를 합산하지 않습니다.
-- '2022-05' 리터럴은 파라미터로 변경 될 수 있는 값이기에 YYYY-MM 의 월초, 월말을 구합니다
-- 컬럼을 형변환 할 시 성능 저하가 발생하여 지양합니다.
) AS a
ON fp.product_id = a.product_id
-- FOOD_ORDER 테이블의 건수가 많을 경우 조회 대상을 먼저 줄인 후
-- FOOD_PRODUCT 테이블과 JOIN하여 성능 향상을 기대할 수 있습니다.
GROUP BY
fp.product_id
, fp.product_name
ORDER BY
SUM(fp.price * a.amount) DESC
, fp.product_id ASC
;
def solution(angle):
return ((angle//90)*2)+((angle%90>0)*1)
def solution(angle):
if 0 < angle < 90:
return 1
elif angle == 90:
return 2
elif 90 < angle < 180:
return 3
elif angle == 180:
return 4
else:
return 'error'
def solution(angle):
if angle <= 90:
return 1 if angle < 90 else 2
elst:
return 3 if angel < 180 else 4
def solution(angle):
return [[1, 2], [3, 4]][angle > 90][angle % 90 == 0]
# 유사한 다른 풀이
solution=lambda x:[[1,2],[0,3,4]][x>90][x//90]
def solution(angle):
angles = [0, 90, 91, 180]
return len([k for k in angles if k<=angle])