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

Cách tính giá trị trung bình trong MySQL

Bạn có thể cần tính giá trị trung bình của một tập hợp số như doanh số bán hàng, v.v. để tìm giá trị giao dịch điển hình của một biến. Bạn cần tính toán giá trị trung bình trong MySQL bằng cách sử dụng các truy vấn SQL vì không có chức năng nào cho nó. Đây là một truy vấn đơn giản để tính giá trị trung bình trong MySQL.

Cách tính giá trị trung bình trong MySQL

Dưới đây là các bước để tính giá trị trung bình trong MySQL. Giả sử bạn có bảng sau

CREATE TABLE exams (
id int(11) NOT NULL auto_increment,
dt date,
score int,
PRIMARY KEY (id)
);

insert into exams (dt,score) values ('2019-01-01',70);
insert into exams (dt,score) values ('2019-02-01',77);
insert into exams (dt,score) values ('2019-03-01',71);
insert into exams (dt,score) values ('2019-04-01',70);

insert into exams (dt,score) values ('2019-05-01',89);
insert into exams (dt,score) values ('2019-06-01',87);
insert into exams (dt,score) values ('2019-07-01',88);
insert into exams (dt,score) values ('2019-08-01',89);

mysql> select * from exams;
+------+------------+-------+
| id   |     dt     | score |
+------+------------+-------+
|   1  | 2019-01-01 |   70  |
|   2  | 2019-02-01 |   77  |
|   3  | 2019-03-01 |   71  |
|   4  | 2019-04-01 |   70  |
|   5  | 2019-05-01 |   89  |
|   6  | 2019-06-01 |   87  |
|   7  | 2019-07-01 |   88  |
|   8  | 2019-08-01 |   89  |
+------+------------+-------+

Giả sử bạn muốn tìm điểm trung bình cho bảng. Trung vị là giá trị của mục ở giữa trong một mảng số đã được sắp xếp. Nếu mảng có số lượng mục là chẵn thì giá trị trung bình là giá trị trung bình của 2 giá trị ở giữa.

Tính giá trị trung bình trong MySQL

Đây là truy vấn SQL để tính giá trị trung bình cho cột điểm

SELECT AVG(dd.score) as median_val
FROM (
SELECT d.score, @rownum:=@rownum+1 as `row_number`, @total_rows:=@rownum
  FROM exams d, (SELECT @rownum:=0) r
  WHERE d.score is NOT NULL
  -- put some where clause here
  ORDER BY d.score
) as dd
WHERE dd.row_number IN ( FLOOR((@total_rows+1)/2), FLOOR((@total_rows+2)/2) );

+------------+
| median_val |
+------------+
|    82.00   |
+------------+

Hãy xem xét chi tiết truy vấn trên. Chúng tôi sử dụng một truy vấn con SQL trong trường hợp này. Truy vấn bên trong gán @rownum làm chỉ mục tăng dần và sắp xếp các giá trị đã chọn. Vào cuối lần vượt qua đầu tiên, @total_rows sẽ chứa số hàng của các hàng đã chọn. Truy vấn bên ngoài sử dụng @total_rows để xác định giá trị trung bình, bất kể có số giá trị lẻ hay chẵn.

Tính giá trị trung bình trong MySQL sau khi áp dụng bộ lọc

Giả sử bạn chỉ muốn tính giá trị trung bình cho các giá trị lớn hơn 80 (> 80). Bạn có thể làm điều đó bằng cách chỉ cần thêm mệnh đề where vào truy vấn của mình ở trên, như được hiển thị bên dưới (điều kiện lọc được đề cập trong in đậm )

SELECT AVG(dd.score) as median_val
FROM (
SELECT d.score, @rownum:=@rownum+1 as `row_number`, @total_rows:=@rownum
  FROM exams d, (SELECT @rownum:=0) r
  WHERE d.score is NOT NULL
  AND d.score>80
  ORDER BY d.score
) as dd
WHERE dd.row_number IN ( FLOOR((@total_rows+1)/2), FLOOR((@total_rows+2)/2) );

+------------+
| median_val |
+------------+
|    88.50   |
+------------+

Cách vẽ Đường trung vị trên Biểu đồ / Báo cáo

Giả sử bạn muốn hiển thị giá trị trung bình cùng với các giá trị dữ liệu bên trên báo cáo của mình. Trong trường hợp đó, bạn có thể chỉ cần kết hợp chéo bảng kết quả trung bình với bảng dữ liệu ban đầu, như được hiển thị bên dưới.

select * from exams,
(
SELECT AVG(dd.score) as median_val
FROM (
SELECT d.score, @rownum:=@rownum+1 as `row_number`, @total_rows:=@rownum
 FROM exams d, (SELECT @rownum:=0) r
 WHERE d.score is NOT NULL
 -- put some where clause here
 ORDER BY d.score
) as dd
WHERE dd.row_number IN ( FLOOR((@total_rows+1)/2), FLOOR((@total_rows+2)/2) )
) temp;

+------+------------+-------+------------+
| id   |     dt     | score | median_val |
+------+------------+-------+------------+
|   1  | 2019-01-01 |   70  |   82.0000  |
|   2  | 2019-02-01 |   77  |   82.0000  |
|   3  | 2019-03-01 |   71  |   82.0000  |
|   4  | 2019-04-01 |   70  |   82.0000  |
|   5  | 2019-05-01 |   89  |   82.0000  |
|   6  | 2019-06-01 |   87  |   82.0000  |
|   7  | 2019-07-01 |   88  |   82.0000  |
|   8  | 2019-08-01 |   89  |   82.0000  |
+------+------------+-------+------------+

Trong truy vấn trên, chúng tôi đã thực hiện kết hợp chéo giữa các bài kiểm tra bảng có kết quả của truy vấn trung bình (được gắn nhãn là tạm thời )

Dưới đây là một ví dụ về dữ liệu ở trên được vẽ trên biểu đồ đường, được tạo bằng Ubiq.

Bạn có thể tùy chỉnh các truy vấn trên theo yêu cầu của mình để tính giá trị trung bình trong MySQL. FYI, MariaDB cung cấp một hàm tiện ích MEDIAN () để tính toán phương tiện cho một cột giá trị.

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. Cập nhật từ MYSQL lên MYSQLI

  2. PDO fetch:Nhóm tất cả các cặp khóa-giá trị vào mảng assoc

  3. Cách trả lại phần bên trái hoặc bên phải của chuỗi trong MySQL

  4. SQLSTATE [HY000] [2002] Cố gắng kết nối không thành công .. - Khi cố gắng kết nối từ Máy chủ cục bộ đến máy chủ từ xa

  5. Sử dụng LIMIT trong GROUP BY để nhận N kết quả cho mỗi nhóm?