Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách thêm tổng số hàng trong MySQL

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận tổng của cột MySQL trong PHP

  2. Tự động mở rộng quy mô với Amazon Aurora Serverless

  3. Chèn vào bảng MySQL hoặc cập nhật nếu tồn tại

  4. Lỗi giá trị chuỗi không chính xác của MySQL khi lưu chuỗi unicode trong Django

  5. Navicat dành cho MySQL