관련 설명:
https://velog.io/@dyllis_lin/MySQL-%EA%B8%B0%EB%A1%9D2
SELECT food_preparation_time
, delivery_time
, food_preparation_time + delivery_time AS "total_time"
FROM food_orders fo;
SELECT SUM(food_preparation_time) AS "total_food_preparation time"
, AVG(delivery_time) AS avg_food_preparation_time
FROM food_orders fo;
SELECT COUNT(1) AS "count_of_orders"
, COUNT(DISTINCT customer_id) AS "count_of_customers"
FROM food_orders fo;
맨 처음에는 왜 쿼리가 이렇게 짜여지는지 이해가 안갔다.
- 주문 '한' 고객 수 -> 몇명이 주문 했는지
- '한 명이 여러번 주문 했을 수 있다'는 생각을 못 했음 -> 아 그럼 중복을 제거해야 되는 거겠구나
- 근데 나는 DISTINCT를 '몇개의 값을 가지고 있는지 구할 때 사용한다' 라고 배움 -> 직관적으로 이해를 못함(...ㅋㅋ)
- 무슨 말이지? 해서 검색해보니까 DISTINCT는 중복제거 키워드가 맞았다...
그제야 이해 완.
SELECT MIN(price) AS "최솟값"
, MAX(price) AS "최댓값"
FROM food_orders fo;
로직
1. 필요 컬럼 : 주문 금액, 주문 번호(개수를 구해야 하니까)
2. 조건 : 30,000원 이상 -> WHERE 사용
3. 필요 수식 : 개수 구하는 수식 -> COUNT(1)
SELECT COUNT(order_id) AS "주문 건수"
FROM food_orders fo
WHERE price >= 30000;
로직
1. 필요 컬럼 : 음식 종류, 주문 금액, 주문 건수
2. 조건 : 한국 음식
3. 필요 수식 : AVG
SELECT AVG(price) AS "평균 가격"
FROM food_orders fo
WHERE cuisine_type = 'Korean';
SELECT cuisine_type
, SUM(price) AS "금액 합계"
FROM food_orders fo
GROUP BY cuisine_type;
GROUP BY cuisine_type 대신에 GROUP BY 1을 사용해도 된다.
실제로 돌려보니까 똑같이 잘 돌아간다. 근데 나는 컬럼 명 쓰는게 더 안 헷갈리고 좋다...
SELECT restaurant_name
, MAX(price) AS "최대 주문 금액"
FROM food_orders fo
GROUP BY restaurant_name;
SELECT pay_type AS "결제 타입"
, MAX(date) AS "최근 결제일"
FROM payments p
GROUP BY pay_type;
처음 이 문제를 보고 최근? 뭘 써야 하는거지? 날짜 관련 함수 따로 써야 하나? 싶었는데 그냥 MAX() 쓰면 해결 될 문제였다. 반대로 최초 날짜를 구하고 싶으면 MIN().
SELECT *
FROM customers c
ORDER BY name;
SELECT restaurant_name
, MAX(price) AS "최대 주문금액"
FROM food_orders fo
GROUP BY restaurant_name
ORDER BY MAX(PRICE) DESC;
마찬가지로 'ORDER BY MAX(PRICE) DESC' 대신 'ORDER BY 2 DESC'로 써도 잘 돌아간다.
로직
1. 필요 컬럼 : 음식 종류, 주문 금액
2. 조건 : 없음
3. 필요 수식 : GROUP BY cuisine_type -> 음식 종류 별
MIN(price) DESC -> 가장 낮은 금액 순 정렬
SELECT cuisine_type
, MAX(price) AS "최대 주문 금액"
, MIN(price) AS "최소 주문 금액"
FROM food_orders fo
GROUP BY cuisine_type
ORDER BY MIN(price) DESC;
오늘도 TMI
SQL이라는 존재에 천천히 적응해 가는 중...