DB/명령프롬프트 - mysql 예시

[MySQL] product table - product테이블을 이용한 예제

congs 2023. 3. 27. 09:04

1.  type_a별로 상품의 개수와 price 합계 출력

< type_a별로 상품의 개수와 price 합계 출력 >
mysql> select type_a, sum(price) as '합계', count(num) as '개수'
    -> from product
    -> group by type_a
    -> order by type_a;
+------------+--------+------+
| type_a     | 합계   | 개수 |
+------------+--------+------+
| 아우터     | 280400 |    2 |
| 티셔츠     |  55800 |    4 |
| 패션운동복 |  80000 |    2 |
+------------+--------+------+
3 rows in set (0.00 sec)

2. price가 16000이상인 제품을 할인 = 할인 상품의 이름과 원가격 , 할인 가격(10%할인)을 출력

< price가 16000이상인 제품을 할인 = 할인 상품의 이름과 원가격 , 할인 가격(10%할인)을 출력 >

1. 16000이상인 제품 출력
mysql> select * from product where price >= 16000;
+-----+------------+--------------+---------------------+--------+--------+-------------+---------------+
| num | type_a     | type_b       | name                | price  | amount | sale_amount | register_data |
+-----+------------+--------------+---------------------+--------+--------+-------------+---------------+
|   5 | 패션운동복 | 트레이닝상의 | 피트니스상의        |  30000 |     34 |          55 | 2020-11-05    |
|   6 | 패션운동복 | 트레이닝하의 | 피트니스하의        |  50000 |     55 |          34 | 2020-11-06    |
|   7 | 아우터     | 재킷         | 양면 롱 후리스 자켓 | 233000 |    100 |          42 | 2020-11-05    |
|   8 | 아우터     | 패딩         | 롱 패딩 점퍼        |  47400 |     10 |          45 | 2020-11-01    |
+-----+------------+--------------+---------------------+--------+--------+-------------+---------------+
4 rows in set (0.00 sec)

2. 할인 상품의 이름과 원가격 , 할인 가격(10%할인)을 출력
mysql>  select name as '상품이름', price as '원가격', price*0.9 as '할인가격' from product
    -> where price>=16000;
+---------------------+--------+----------+
| 상품이름            | 원가격 | 할인가격 |
+---------------------+--------+----------+
| 피트니스상의        |  30000 |  27000.0 |
| 피트니스하의        |  50000 |  45000.0 |
| 양면 롱 후리스 자켓 | 233000 | 209700.0 |
| 롱 패딩 점퍼        |  47400 |  42660.0 |
+---------------------+--------+----------+
4 rows in set (0.00 sec)

3. 11월에 입고된 상품만 출력 

< 11월에 입고된 상품만 출력 >
- month(날짜) : 해당날짜의 월만 추출
- year(날짜) : 해당날짜의 년만 추출
- day(날짜) : 해당날짜의 일만 추출
mysql> select * from product where month( register_data ) = 11;
+-----+------------+--------------+---------------------+--------+--------+-------------+---------------+
| num | type_a     | type_b       | name                | price  | amount | sale_amount | register_data |
+-----+------------+--------------+---------------------+--------+--------+-------------+---------------+
|   4 | 티셔츠     | 반소매       | 에어 나시           |   9000 |     33 |          33 | 2020-11-10    |
|   5 | 패션운동복 | 트레이닝상의 | 피트니스상의        |  30000 |     34 |          55 | 2020-11-05    |
|   6 | 패션운동복 | 트레이닝하의 | 피트니스하의        |  50000 |     55 |          34 | 2020-11-06    |
|   7 | 아우터     | 재킷         | 양면 롱 후리스 자켓 | 233000 |    100 |          42 | 2020-11-05    |
|   8 | 아우터     | 패딩         | 롱 패딩 점퍼        |  47400 |     10 |          45 | 2020-11-01    |
+-----+------------+--------------+---------------------+--------+--------+-------------+---------------+
5 rows in set (0.00 sec)

4. 10월 이전에 입고된 상품만 출력

mysql> select * from product where month( register_data ) <=10;
+-----+--------+--------+-------------------+-------+--------+-------------+---------------+
| num | type_a | type_b | name              | price | amount | sale_amount | register_data |
+-----+--------+--------+-------------------+-------+--------+-------------+---------------+
|   1 | 티셔츠 | 긴소매 | 폴라티셔츠        | 15000 |     34 |         100 | 2020-10-15    |
|   2 | 티셔츠 | 반소매 | 순면라운드 반팔티 | 15900 |     10 |         153 | 2020-09-15    |
|   3 | 티셔츠 | 반소매 | 순면라운드 반팔티 | 15900 |     10 |         153 | 2020-09-15    |
|  30 | 아우터 | 코트   | 양털 겨울 코트    | 50000 |     50 |          30 | 2020-10-31    |
+-----+--------+--------+-------------------+-------+--------+-------------+---------------+
4 rows in set (0.00 sec)

5. 각 type_a 별 판매량 (sale_amount) 합계 / 판매량이 많은 순으로 내림차순 정렬

mysql> select type_a, sum(sale_amount) as "판매량 합계" from product
    -> group by type_a
    -> order by sum(sale_amount) desc;
+------------+-------------+
| type_a     | 판매량 합계 |
+------------+-------------+
| 티셔츠     |         439 |
| 아우터     |         117 |
| 패션운동복 |          89 |
+------------+-------------+
3 rows in set (0.00 sec)

6. 월별 판매량 합계 / 월별 오름차순 정렬

mysql> select month(register_data) as "월", sum(sale_amount) as '판매량' from product
    -> group by month(register_data)
    -> order by month(register_data);
+------+--------+
| 월   | 판매량 |
+------+--------+
|    9 |    306 |
|   10 |    130 |
|   11 |    209 |
+------+--------+
3 rows in set (0.00 sec)

mysql> select month(register_data) as "월", sum(sale_amount) as '판매량' from product
    -> group by 월
    -> order by 월;
+------+--------+
| 월   | 판매량 |
+------+--------+
|    9 |    306 |
|   10 |    130 |
|   11 |    209 |
+------+--------+
3 rows in set (0.00 sec)

7.  년.월로 판매량 합계 / 년.월로 날짜 순 오름차순 정렬

mysql> select date_format(register_data,'%Y-%m') as '날짜', sum(sale_amount) as '월별 판매량 합계'
    -> from product
    -> group by date_format(register_data,'%Y-%m')
    -> order by date_format(register_data,'%Y-%m');
+---------+------------------+
| 날짜    | 월별 판매량 합계 |
+---------+------------------+
| 2020-09 |              306 |
| 2020-10 |              130 |
| 2020-11 |              209 |
+---------+------------------+
3 rows in set (0.00 sec)

mysql> select date_format(register_data,'%Y-%m') as '날짜', sum(sale_amount) as '월별 판매량 합계'
    -> from product
    -> group by 날짜
    -> order by 날짜;
+---------+------------------+
| 날짜    | 월별 판매량 합계 |
+---------+------------------+
| 2020-09 |              306 |
| 2020-10 |              130 |
| 2020-11 |              209 |
+---------+------------------+
3 rows in set (0.00 sec)

8. type_a별로 합계를 구하고 그의  합계의 max값을 구하기

mysql> select max(sum) from (
    -> select sum(sale_amount) as sum from product
    -> group by type_a) as p; //p는 오류를 막기위한 임시 문자
+----------+
| max(sum) |
+----------+
|      439 |
+----------+
1 row in set (0.00 sec)