2

2つの連続する集計関数をデータセット(一連の平均の合計)に適用する必要があります。これは、SQLServerまたはCTEをサポートする別のDBMSの一般的なテーブル式で簡単かつ日常的に実行できます。残念ながら、私は現在、CTEをサポートしていないSQLiteで立ち往生しています。2つのクエリを実行して結果をコードにロールアップせずにSQLiteで同じ結果を達成するための代替または回避策はありますか?

さらにいくつかの詳細を追加すると、いくつかのパラメーターを持つWHERE句に基づいて集計値の最初のセットを取得する必要があるため、ビューで簡単に実行できるとは思いません。例えば、

SELECT avg(elapsedTime)
FROM statisticsTable
WHERE connectionId in ([lots of values]) AND 
      updateTime > [startTime] AND
      updateTime < [endTime]
GROUP BY connectionId

そして、それらの平均の合計が必要です。

4

3 に答える 3

8

将来に向けて、2014-02-03のバージョン3.8.3以降、 SQLite共通テーブル式をサポートするようになったことをここで確認します。

http://www.sqlite.org/lang_with.html

于 2014-06-03T22:17:54.933 に答える
3

これは機能しますか?

SELECT SUM(t.time) as sum_of_series_of_averages
FROM
(
SELECT avg(elapsedTime) as time
FROM statisticsTable
WHERE connectionId in ([lots of values]) AND 
      updateTime > [startTime] AND
      updateTime < [endTime]
GROUP BY connectionId
) as t

平均をインラインビューに変換することで、平均をSUM()できます。

これはあなたが探しているものですか?

于 2010-07-12T23:14:50.413 に答える
2

おっしゃるように、SQLiteはCTEやウィンドウ関数などをサポートしていません。

ただし、 sqlite_create_function()を使用してSQLite APIを使用してデータベースに登録することにより、SQLite内で呼び出すことができる独自のユーザー関数を作成できます。それらをデータベースに登録すると、独自のアプリケーションコードで使用できるようになります。個々の列の値に基づいて一連の平均の合計を実行する集計関数を作成できます。値ごとに、データに対して何らかの計算を実行できるステップタイプのコールバック関数が呼び出され、状態データを保持するためのポインターも使用できます。

次に、SQLで、sum_of_series_of_averagesというカスタム関数を登録し、次のようにすることができます。

SELECT sum_of_series_of_averages(columnA,columnB)
FROM table
WHERE ...

それらがどのように機能するかについてのいくつかの良い例については、SQLiteソースコードをチェックし、このチュートリアルもチェックする必要があります(を検索してくださいDefining SQLite User Functions)。

于 2010-07-12T22:55:11.560 に答える