Nhiều lần, bạn cần báo cáo dữ liệu trong bảng MySQL, cùng với các tổng. Có 2 cách để thêm tổng hàng trong MySQL, sử dụng UNION ALL và ROLLUP. Đây là cách thêm tổng số hàng trong MySQL.
Cách thêm Tổng số Hàng trong MySQL
Dưới đây là các bước để thêm tổng hàng trong MySQL. Giả sử bạn có doanh số bán hàng trong bảng sau (order_date, sale).
mysql> create table sales(order_date date,sale int); mysql> insert into sales values('2020-01-01',20), ('2020-01-02',25),('2020-01-03',15),('2020-01-04',30), ('2020-02-05',20),('2020-02-10',20),('2020-02-06',25), ('2020-03-07',15),('2020-03-08',30),('2020-03-09',20); mysql> select * from sales; +------------+------+ | order_date | sale | +------------+------+ | 2020-01-01 | 20 | | 2020-01-02 | 25 | | 2020-01-03 | 15 | | 2020-01-04 | 30 | | 2020-02-05 | 20 | | 2020-02-10 | 20 | | 2020-02-06 | 25 | | 2020-03-07 | 15 | | 2020-03-08 | 30 | | 2020-03-09 | 20 | +------------+------+
Chúng ta sẽ xem xét 2 cách để thêm tổng hàng trong MySQL - sử dụng UNION ALL và ROLLUP. Hàm ROLLUP đã được thêm vào MySQL từ phiên bản 5.0. Vì vậy, những người làm việc với các phiên bản cũ hơn sẽ cần sử dụng UNION ALL.
Sử dụng UNION ALL
Trong cách tiếp cận này, chúng tôi TÓM TẮT dữ liệu và chỉ cần thêm nó vào bảng ban đầu của chúng tôi bằng cách sử dụng mệnh đề UNION ALL, như được hiển thị bên dưới
mysql> select * from sales UNION ALL select 'Total' order_date,sum(sale) from sales; +------------+------+ | order_date | sale | +------------+------+ | 2020-01-01 | 20 | | 2020-01-02 | 25 | | 2020-01-03 | 15 | | 2020-01-04 | 30 | | 2020-02-05 | 20 | | 2020-02-10 | 20 | | 2020-02-06 | 25 | | 2020-03-07 | 15 | | 2020-03-08 | 30 | | 2020-03-09 | 20 | | Total | 220 | +------------+------+
Trong truy vấn trên, tổng số hàng được hiển thị dưới dạng hàng cuối cùng được thêm vào bảng ban đầu của bạn bằng cách sử dụng UNION ALL. Điều này không thay đổi bảng gốc mà chỉ thay đổi kết quả được hiển thị. Trong khi sử dụng UNION ALL, cần phải duy trì các cột giống nhau trong tất cả các truy vấn chọn lọc được sử dụng trong đó. Đó là lý do tại sao, chúng tôi đã chỉ định văn bản 'Tổng cộng' là order_date cột. UNION ALL là một cách cổ điển để thêm tổng số trong MySQL.
Phần thưởng đọc:Cách tính Tổng số đang chạy trong MySQL
Sử dụng ROLLUP
Bạn cũng có thể sử dụng GROUP BY với mệnh đề ROLLUP để trực tiếp tổng các giá trị và tự động thêm tổng hàng trong MySQL, như được hiển thị bên dưới
mysql> select * from sales group by order_date with rollup; +------------+------+ | order_date | sale | +------------+------+ | 2020-01-01 | 20 | | 2020-01-02 | 25 | | 2020-01-03 | 15 | | 2020-01-04 | 30 | | 2020-02-05 | 20 | | 2020-02-06 | 25 | | 2020-02-10 | 20 | | 2020-03-07 | 15 | | 2020-03-08 | 30 | | 2020-03-09 | 20 | | NULL | 20 | +------------+------+
Sử dụng ROLLUP ngắn hơn và cũng giúp bạn thêm hàng tóm tắt với tổng, nhưng nó không cho phép bạn thêm văn bản tùy chỉnh như 'Tổng' vào hàng cuối cùng của bạn. Một vấn đề khác là nó sẽ tự động cuộn dữ liệu cho nhiều cấp, thêm hàng tổng phụ cũng như hàng tổng ..
Dưới đây là một ví dụ để thêm tổng hàng trong MySQL, sử dụng ROLLUP. Giả sử bạn có bảng sau
mysql> create table sales(product varchar(255),order_date date,sale int); mysql> insert into sales values('A','2020-01-01',20),('B','2020-01-02',25), ('B','2020-01-03',15),('A','2020-01-04',30),('A','2020-01-05',20); mysql> select * from sales; +---------+------------+------+ | product | order_date | sale | +---------+------------+------+ | A | 2020-01-01 | 20 | | B | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | A | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | +---------+------------+------+
Phần thưởng đọc:Cách kết hợp nhiều dòng thành một trường trong MySQL
Bất kể bạn chỉ định mệnh đề GROUP BY của mình như thế nào, bạn sẽ luôn kết thúc bằng NULL và tổng phụ, khi bạn thêm tổng hàng trong MySQL, khi bạn sử dụng ROLLUP.
GROUP BY product and order_date mysql> select product,order_date,sum(sale) from sales group by product,order_date with rollup; +---------+------------+-----------+ | product | order_date | sum(sale) | +---------+------------+-----------+ | A | 2020-01-01 | 20 | | A | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | | A | NULL | 70 | | B | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | B | NULL | 40 | | NULL | NULL | 110 | +---------+------------+-----------+ GROUP BY only product mysql> select product,order_date,sum(sale) from sales group by product with rollup; +---------+------------+-----------+ | product | order_date | sum(sale) | +---------+------------+-----------+ | A | 2020-01-01 | 70 | | B | 2020-01-02 | 40 | | NULL | 2020-01-02 | 110 | +---------+------------+-----------+ GROUP BY order_date mysql> select product,order_date,sum(sale) from sales group by order_date with rollup; +---------+------------+-----------+ | product | order_date | sum(sale) | +---------+------------+-----------+ | A | 2020-01-01 | 20 | | B | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | A | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | | A | NULL | 110 | +---------+------------+-----------+
Tuy nhiên, như đã đề cập trước đây, đây là một cách rất tiện lợi để nhanh chóng tính tổng phụ và cộng tổng hàng trong MySQL.
Vì vậy, nếu bạn muốn tùy chỉnh tổng hàng của mình, hãy sử dụng UNION ALL vì nó cho phép bạn kiểm soát nhiều hơn. Mặt khác, nếu bạn cũng muốn tính tổng phụ, hãy sử dụng ROLLUP.
Đó là nó! Bây giờ bạn đã biết cách thêm tổng số hàng trong MySQL.
Bạn có thể sử dụng công cụ báo cáo để vẽ dữ liệu này trong bảng và chia sẻ dữ liệu đó với nhóm của bạn. Đây là ví dụ về một bảng được tạo bằng Ubiq.
Nếu bạn muốn tạo biểu đồ, trang tổng quan và báo cáo từ cơ sở dữ liệu MySQL, bạn có thể thử Ubiq. Chúng tôi cung cấp bản dùng thử miễn phí 14 ngày.