MySQL Truy Vấn Thống Kê

MySQL Truy Vấn Thống Kê, 10 ví dụ cụ thể

Truy vấn thống kê trong MySQL là một phần quan trọng giúp chúng ta phân tích và hiểu rõ hơn về dữ liệu. Việc sử dụng các câu lệnh SQL như COUNT(), SUM(), AVG(), MAX(), MIN(), GROUP BYHAVING sẽ giúp lấy thông tin tổng hợp từ cơ sở dữ liệu một cách hiệu quả. Trong bài viết này, chúng ta sẽ tìm hiểu về các kỹ thuật truy vấn thống kê với 10 ví dụ cụ thể.

Tạo bảng dữ liệu

Câu lệnh tạo bảng customers

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);

Câu lệnh tạo bảng orders

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    total_amount DECIMAL(10,2),
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

Câu lệnh tạo bảng order_details

CREATE TABLE order_details (
    detail_id INT PRIMARY KEY,
    order_id INT,
    product_id INT,
    quantity INT,
    FOREIGN KEY (order_id) REFERENCES orders(order_id)
);

Bảng dữ liệu mẫu

Bảng customers

customer_id name
1 Nguyễn Văn A
2 Trần Thị B
3 Lê Văn C

Câu lệnh INSERT cho bảng customers

INSERT INTO customers (customer_id, name) VALUES
(1, 'Nguyễn Văn A'),
(2, 'Trần Thị B'),
(3, 'Lê Văn C');

Bảng orders

order_id customer_id order_date total_amount
1 1 2024-01-10 500000
2 2 2024-02-15 750000
3 1 2024-03-20 300000
4 3 2024-04-25 650000
5 2 2024-05-30 850000

Câu lệnh INSERT cho bảng orders

INSERT INTO orders (order_id, customer_id, order_date, total_amount) VALUES
(1, 1, '2024-01-10', 500000),
(2, 2, '2024-02-15', 750000),
(3, 1, '2024-03-20', 300000),
(4, 3, '2024-04-25', 650000),
(5, 2, '2024-05-30', 850000);

Bảng order_details

detail_id order_id product_id quantity
1 1 101 2
2 1 102 1
3 2 103 3
4 3 101 1
5 4 104 2
6 5 103 4

Câu lệnh INSERT cho bảng order_details

INSERT INTO order_details (detail_id, order_id, product_id, quantity) VALUES
(1, 1, 101, 2),
(2, 1, 102, 1),
(3, 2, 103, 3),
(4, 3, 101, 1),
(5, 4, 104, 2),
(6, 5, 103, 4);

1. Đếm số lượng bản ghi (COUNT)

Ví dụ 1: Đếm tổng số khách hàng

SELECT COUNT(*) AS total_customers FROM customers; // Output 10

Giải thích:

  • COUNT(*) đếm tất cả các dòng trong bảng customers.

  • AS total_customers đặt tên cột kết quả.

MySQL Truy Vấn Thống Kê
MySQL Truy Vấn Thống Kê

2. Tính tổng (SUM)

Ví dụ 2: Tổng doanh thu từ đơn hàng

SELECT SUM(total_amount) AS total_revenue FROM orders; // Output 3050000.0

Giải thích:

  • SUM(total_amount) tính tổng giá trị cột total_amount trong bảng orders.

3. Tính trung bình (AVG)

Ví dụ 3: Trung bình số tiền đơn hàng

SELECT AVG(total_amount) AS average_order FROM orders; // Output 610000.0

Giải thích:

  • AVG(total_amount) tính giá trị trung bình của total_amount.

4. Tìm giá trị lớn nhất (MAX)

Ví dụ 4: Đơn hàng có giá trị cao nhất

SELECT MAX(total_amount) AS max_order FROM orders; // Output 850000.0

Giải thích:

  • MAX(total_amount) trả về giá trị lớn nhất trong cột total_amount.

5. Tìm giá trị nhỏ nhất (MIN)

Ví dụ 5: Đơn hàng có giá trị thấp nhất

SELECT MIN(total_amount) AS min_order FROM orders; // Output 300000.0

Giải thích:

  • MIN(total_amount) trả về giá trị nhỏ nhất trong cột total_amount.

6. Thống kê theo nhóm (GROUP BY)

Ví dụ 6: Số đơn hàng theo khách hàng

SELECT customer_id, COUNT(*) AS order_count FROM orders GROUP BY customer_id;

// Output kết quả:

Thống kê theo nhóm (GROUP BY)
Thống kê theo nhóm (GROUP BY)

Giải thích:

  • GROUP BY customer_id nhóm dữ liệu theo khách hàng.

  • COUNT(*) đếm số đơn hàng cho từng khách hàng.

7. Sử dụng điều kiện trong thống kê (HAVING)

Ví dụ 7: Tìm khách hàng có trên 5 đơn hàng

SELECT customer_id, COUNT(*) AS order_count 
FROM orders GROUP BY customer_id HAVING COUNT(*) > 5;

Giải thích:

  • HAVING COUNT(*) > 5 lọc chỉ các khách hàng có hơn 5 đơn hàng.

8. Thống kê doanh thu theo tháng

Ví dụ 8: Tổng doanh thu theo tháng

SELECT MONTH(order_date) AS month, SUM(total_amount) AS total_revenue 
FROM orders GROUP BY MONTH(order_date);

// Output kết quả truy vấn doanh thu theo tháng

Kế quả truy vấn doanh thu theo tháng
Kế quả truy vấn doanh thu theo tháng

Giải thích:

  • MONTH(order_date) trích xuất tháng từ order_date.

  • SUM(total_amount) tính tổng doanh thu theo tháng.

9. Tìm sản phẩm bán chạy nhất

Ví dụ 9: Sản phẩm có số lượng bán nhiều nhất

SELECT product_id, SUM(quantity) AS total_sold 
FROM order_details 
GROUP BY product_id ORDER BY total_sold DESC LIMIT 1;

// Ouput
product_id = 103
total_sold = 7

Giải thích:

  • SUM(quantity) tính tổng số lượng bán cho từng sản phẩm.

  • ORDER BY total_sold DESC sắp xếp giảm dần.

  • LIMIT 1 lấy sản phẩm bán chạy nhất.

10. Tính phần trăm đóng góp của từng sản phẩm

Ví dụ 10: Tỷ lệ % doanh thu từng sản phẩm

SELECT od.product_id, SUM(o.total_amount) / (SELECT SUM(total_amount) FROM orders) * 100 AS revenue_percentage 
FROM orders o
JOIN order_details od ON o.order_id = od.order_id
GROUP BY od.product_id;

// Output kế quả truy vấn tính tỷ lệ % doanh thu từng sản phẩm

MySQL truy vấn tính tỷ lệ % doanh thu từng sản phẩm
MySQL truy vấn tính tỷ lệ % doanh thu từng sản phẩm

Giải thích:

  • JOIN order_details od ON o.order_id = od.order_id kết hợp bảng ordersorder_details.

  • SUM(o.total_amount) / (SELECT SUM(total_amount) FROM orders) * 100 tính phần trăm doanh thu của từng sản phẩm.

  • GROUP BY od.product_id nhóm theo product_id để tính doanh thu cho từng sản phẩm.

KẾT LUẬN

Truy vấn thống kê giúp phân tích dữ liệu trong MySQL một cách hiệu quả. Các kỹ thuật quan trọng bao gồm:

  • Đếm số lượng (COUNT) để biết tổng số bản ghi.

  • Tính tổng (SUM) để xác định doanh thu.

  • Tính trung bình (AVG) để xem xu hướng dữ liệu.

  • Tìm giá trị lớn nhất/nhỏ nhất (MAX/MIN) để xác định mức cao/thấp.

  • Nhóm dữ liệu (GROUP BY) để phân loại dữ liệu.

  • Lọc dữ liệu thống kê (HAVING) để áp dụng điều kiện.

Bằng cách kết hợp các kỹ thuật này, bạn có thể xây dựng các báo cáo phân tích dữ liệu mạnh mẽ trong MySQL.

TAGS: mysql
About the Author