Tóm tắt :trong hướng dẫn này, bạn sẽ học cách sử dụng SQLite AVG
hàm để tính giá trị trung bình của một bộ giá trị.
Giới thiệu về hàm AVG của SQLite
AVG
hàm là một hàm tổng hợp tính giá trị trung bình của tất cả các giá trị không phải NULL trong một nhóm.
Phần sau minh họa cú pháp của AVG
chức năng:
AVG([ALL | DISTINCT] expression);
Code language: SQL (Structured Query Language) (sql)
Theo mặc định, AVG
hàm sử dụng ALL
cho dù bạn có chỉ định nó hay không. Nó có nghĩa là hàm AVG sẽ nhận tất cả các giá trị không phải NULL khi nó tính giá trị trung bình.
Trong trường hợp bạn muốn tính giá trị trung bình của các giá trị khác biệt (hoặc duy nhất), bạn cần chỉ định mệnh đề DISTINCT một cách rõ ràng trong biểu thức.
Nếu một cột lưu trữ các kiểu dữ liệu hỗn hợp như số nguyên, thực, BLOB và văn bản, thì SQLite AVG
hàm diễn giải BLOB trông không giống một số là số không (0).
Giá trị của AVG
hàm luôn là giá trị dấu phẩy động hoặc NULL
giá trị. AVG
hàm chỉ trả về một NULL
giá trị nếu và chỉ khi tất cả các giá trị trong nhóm là NULL
giá trị.
Bạn có thể thực hiện một bài kiểm tra nhanh để xem hàm SQLite hoạt động như thế nào với nhiều kiểu dữ liệu khác nhau.
Đầu tiên, tạo một bảng mới có tên avg_tests
sử dụng câu lệnh sau:
CREATE TABLE avg_tests (val);
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Tiếp theo, chèn một số giá trị hỗn hợp vào avg_tests
bảng.
INSERT INTO avg_tests (val)
VALUES
(1),
(2),
(10.1),
(20.5),
('8'),
('B'),
(NULL),
(x'0010'),
(x'0011');
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Sau đó, truy vấn dữ liệu từ avg_tests
bảng.
SELECT rowid,
val
FROM avg_tests;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Sau đó, bạn có thể sử dụng AVG
hàm để tính giá trị trung bình của bốn hàng đầu tiên chỉ chứa các giá trị số.
SELECT
avg(val)
FROM
avg_tests
WHERE
rowid < 5;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Cuối cùng, áp dụng AVG
hàm cho tất cả các giá trị trong val
cột của avg_tests
bảng.
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Bạn có 9 hàng trong avg_tests
bàn. Hàng 7 là NULL
. Do đó, khi tính giá trị trung bình, AVG
hàm bỏ qua nó và tính toán 8 hàng.
Bốn hàng đầu tiên là số nguyên và giá trị thực:1,2, 10,1 và 20,5. Hàm AVG của SQLite sử dụng các giá trị đó trong phép tính.
Hàng thứ 5 và thứ 6 là kiểu văn bản vì chúng tôi đã chèn là ‘B’ và ‘8’. Bởi vì 8 trông giống như một số, do đó SQLite hiểu B là 0 và ‘8’ là 8.
Hàng thứ 8 và thứ 9 là BLOB
các kiểu không giống số, do đó, SQLite diễn giải các giá trị này là 0.
AVG(cal)
biểu thức sử dụng công thức sau:
AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2
Code language: SQL (Structured Query Language) (sql)
Hãy xem cách DISTINCT
mệnh đề hoạt động.
Đầu tiên, hãy chèn một hàng mới vào avg_tests
bảng có giá trị đã tồn tại.
INSERT INTO avg_tests (val)
VALUES (10.1);
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Thứ hai, áp dụng AVG
chức năng không có DISTINCT
mệnh đề:
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Thứ ba, thêm DISTINCT
mệnh đề tới AVG
chức năng:
SELECT
avg(DISTINCT val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Vì avg_tests
bảng có hai hàng có cùng giá trị 10.1, AVG(DISTINCT)
chỉ lấy một hàng để tính toán. Do đó, bạn nhận được một kết quả khác.
SQLite AVG
chức năng ví dụ thực tế
Chúng tôi sẽ sử dụng tracks
trong cơ sở dữ liệu mẫu cho phần trình diễn.
Để tính độ dài trung bình của tất cả các bản nhạc theo mili giây, bạn sử dụng câu lệnh sau:
SELECT
avg(milliseconds)
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Hàm AVG của SQLite với GROUP BY
mệnh đề
Để tính độ dài trung bình của các bản nhạc cho mọi album, bạn sử dụng AVG
chức năng với GROUP BY
mệnh đề.
Đầu tiên, GROUP BY
mệnh đề nhóm một tập hợp các bản nhạc theo album. Sau đó, AVG
hàm tính toán độ dài trung bình của các bản nhạc cho mỗi album.
Xem tuyên bố sau.
SELECT
albumid,
avg(milliseconds)
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
SQLite AVG
chức năng với INNER JOIN
ví dụ mệnh đề
Để lấy tiêu đề album cùng với albumid
, bạn sử dụng mệnh đề INNER JOIN trong câu lệnh trên giống như truy vấn sau:
SELECT
tracks.AlbumId,
Title,
round(avg(Milliseconds), 2) avg_length
FROM
tracks
INNER JOIN albums ON albums.AlbumId = tracks.albumid
GROUP BY
tracks.albumid;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Lưu ý rằng chúng tôi đã sử dụng ROUND
hàm làm tròn giá trị động đến 2 chữ số ở bên phải dấu thập phân.
Hàm AVG trong SQLite với ví dụ mệnh đề HAVING
Bạn có thể sử dụng AVG
chức năng hoặc bí danh của cột của nó trong mệnh đề HAVING để lọc các nhóm. Câu lệnh sau chỉ lấy các anbom có độ dài trung bình từ 100000 đến 200000.
SELECT
tracks.albumid,
title,
round(avg(milliseconds),2) avg_leng
FROM
tracks
INNER JOIN albums ON albums.AlbumId = tracks.albumid
GROUP BY
tracks.albumid
HAVING
avg_leng BETWEEN 100000 AND 200000;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách sử dụng SQLite AVG
hàm để tính giá trị trung bình của các giá trị không phải NULL trong một nhóm.