일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- redis
- IONQ
- KNN
- TSLA
- Analyzer
- vavr
- file download
- dbeaver
- ann
- Cache
- 테슬라
- aggs
- API
- Aggregation
- Selenium
- api cache
- mysql
- Docker
- NORI
- aqqle
- Elasticsearch
- JPA
- request cache
- java crawler
- 양자컴퓨터
- java
- elasticsearch cache
- Elastic
- Query
- 아이온큐
Archives
- Today
- Total
아빠는 개발자
[MySQL] Group by 결과로 sort, 여러 조건을 결과로 sort 본문
728x90
반응형
MySQL에서 GROUP BY 절을 사용하여 데이터를 그룹화한 후, ORDER BY 절을 사용하여 결과를 정렬하는 방법
일단 테스트 테이블 생성
CREATE TABLE sales (
id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255),
quantity INT,
price DECIMAL(10, 2)
);
이런식으로 상품명으로 그룹핑하고 상품명에 대한 판매량 (quantity) 모두 더해 총 판매량으로 만든 후 order by 절을 이용한 내림차순(DESC) 정렬
SELECT product_name, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product_name
ORDER BY total_quantity DESC;
CASE WHEN 절의 조건으로 SUM 을 하여 total 을 구하고 그 결과로 order by 절을 이용한 정렬
SELECT
customer_id,
SUM(CASE WHEN order_status = 'Completed' THEN order_amount ELSE 0 END) AS completed_order_total,
SUM(CASE WHEN order_status = 'Pending' THEN order_amount ELSE 0 END) AS pending_order_total
FROM
orders
GROUP BY
customer_id
ORDER BY completed_order_total DESC, pending_order_total DESC;
SUM 안에 IF 문을 넣은 수도 있고 IF 문 안에서 SUM 을 해서 조건을 다르게 할 수도 있다.
SELECT
customer_id,
SUM(IF(order_status = 'Completed', order_amount, 0)) AS completed_order_total,
IF(SUM(IF(order_status = 'Completed', order_amount, 0)) >= 100, 'High Spender', 'Regular Spender') AS spender_category
FROM
orders
GROUP BY
customer_id;
물론 이 모든 쿼리는 실행계획을 통해서 성능을 확인해봐야 할 듯
728x90
반응형
'Database' 카테고리의 다른 글
[Aqqle] SQL (0) | 2024.09.29 |
---|---|
[DB] DBeaver - Public key retrieval is not allowed (0) | 2024.08.11 |
[database] DBeaver 다운로드 (0) | 2024.01.07 |
[MySQL] Ngram (1) | 2024.01.07 |
[MySql] MySQLWorkbench EER diagram 그리기 (0) | 2023.09.02 |