概要 :このチュートリアルでは、SQLite AVG
の使用方法を学習します 一連の値の平均値を計算する関数。
SQLiteAVG関数の概要
AVG
関数は、すべての非NULL値の平均値を計算する集計関数です。 グループ内。
次に、AVG
の構文を示します。 機能:
AVG([ALL | DISTINCT] expression);
Code language: SQL (Structured Query Language) (sql)
デフォルトでは、AVG
関数はALL
を使用します 指定するかどうかに関係なく句。これは、AVG関数が平均値を計算するときにNULL以外のすべての値を取得することを意味します。
個別の(または一意の)値の平均値を計算する場合は、式でDISTINCT句を明示的に指定する必要があります。
列に整数、実数、BLOB、テキストなどの混合データ型が格納されている場合、SQLite AVG
関数は、数値のように見えないBLOBをゼロ(0)として解釈します。
AVG
の値 関数は常に浮動小数点値またはNULL
価値。 AVG
関数はNULL
のみを返します 値ifand only if グループ内のすべての値はNULL
です 値。
簡単なテストを行って、SQLite関数がさまざまなデータ型でどのように機能するかを確認できます。
まず、avg_tests
という名前の新しいテーブルを作成します 次のステートメントを使用します:
CREATE TABLE avg_tests (val);
Code language: SQL (Structured Query Language) (sql)
試してみてください
次に、いくつかの混合値をavg_tests
に挿入します テーブル。
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)
試してみてください
次に、avg_tests
からデータをクエリします テーブル。
SELECT rowid,
val
FROM avg_tests;
Code language: SQL (Structured Query Language) (sql)
試してみてください
その後、AVG
を使用できます 数値のみを含む最初の4行の平均を計算する関数。
SELECT
avg(val)
FROM
avg_tests
WHERE
rowid < 5;
Code language: SQL (Structured Query Language) (sql)
試してみてください
最後に、AVG
を適用します val
のすべての値に機能します avg_tests
の列 テーブル。
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
試してみてください
avg_tests
には9行あります テーブル。行7はNULL
です 。したがって、平均を計算するときは、AVG
関数はそれを無視し、計算に8行を取ります。
最初の4行は整数値と実数値です:1、2、10.1、および20.5。 SQLite AVG関数は、これらの値を計算に使用します。
5行目と6行目は、「B」と「8」を挿入したため、テキストタイプです。 8は数字のように見えるため、SQLiteはBを0として解釈し、「8」を8として解釈します。
8行目と9行目はBLOB
です。 数値のように見えないタイプであるため、SQLiteはこれらの値を0として解釈します。
AVG(cal)
式は次の式を使用します:
AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2
Code language: SQL (Structured Query Language) (sql)
DISTINCT
がどのようになっているのか見てみましょう 条項は機能します。
まず、avg_tests
に新しい行を挿入します 値を持つテーブルはすでに存在します。
INSERT INTO avg_tests (val)
VALUES (10.1);
Code language: SQL (Structured Query Language) (sql)
試してみてください
次に、AVG
を適用します DISTINCT
なしで機能する 条項:
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
試してみてください
3番目に、DISTINCT
を追加します AVG
の句 機能:
SELECT
avg(DISTINCT val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
試してみてください
avg_tests
テーブルには、同じ値10.1の2つの行、AVG(DISTINCT)
があります。 計算には1行だけかかります。したがって、異なる結果が得られます。
SQLite AVG
機能の実例
tracks
を使用します デモンストレーション用のサンプルデータベースのテーブル。
すべてのトラックの平均の長さをミリ秒単位で計算するには、次のステートメントを使用します。
SELECT
avg(milliseconds)
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
試してみてください
GROUP BY
を使用したSQLiteAVG関数 条項
すべてのアルバムのトラックの平均の長さを計算するには、AVG
を使用します GROUP BY
で機能する 条項。
まず、GROUP BY
句は、アルバムごとに一連のトラックをグループ化します。次に、AVG
関数は、各アルバムのトラックの平均の長さを計算します。
次のステートメントを参照してください。
SELECT
albumid,
avg(milliseconds)
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
試してみてください
SQLite AVG
INNER JOIN
で機能する 条項の例
albumid
と一緒にアルバムタイトルを取得するには 列では、次のクエリのように、上記のステートメントでINNERJOIN句を使用します。
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)
試してみてください
ROUND
を使用したことに注意してください 浮動小数点値を小数点の右側の2桁に丸める関数。
HAVING句の例を使用したSQLiteAVG関数
AVG
のいずれかを使用できます グループをフィルタリングするためのHAVING句の関数またはその列のエイリアス。次のステートメントは、平均の長さが100000〜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)
試してみてください
このチュートリアルでは、SQLite AVG
の使用方法を説明しました。 グループ内のNULL以外の値の平均値を計算する関数。