概要 :このチュートリアルでは、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.2Code 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以外の値の平均値を計算する関数。