4

本とその本に関する複数の価格を含むテーブルがあります (これは非常に単純化されたサンプルです)。

身分証明書の価格
1 BOOK1 10
2 BOOK1 15
3 BOOK1 12
4 BOOK2 8
5 BOOK2 2

私は簡単に平均を計算していますが、中央値を計算する良い方法があるはずですか?

現在の SQL:

SELECT DISTINCTROW Books.BOOK, Avg(Books.PRICE) AS [Avg Of PRICE]
FROM Books
GROUP BY Books.BOOK;

結果:

予約の平均価格
ブック1 12.3333333333333
BOOK2 5

4

4 に答える 4

4

2007 年に追加された場合を除き、Jet SQL には Median はありませんが、取得方法のアイデアを次に示します。必要になるだろう ...

いくつかの SQL ...

SELECT Statistics.Month, Sum(([SentTo])) AS [Sum Sent], fMedian("Statistics","Month",[Month],"SentTo") AS [Median Sent]
FROM Statistics
GROUP BY Statistics.Month;

そしてユーザー定義関数 (UDF)。

Function fMedian(SQLOrTable, GroupFieldName, GroupFieldValue, MedianFieldName)
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs1 = db.OpenRecordset(SQLOrTable, dbOpenDynaset)

If IsDate(GroupFieldValue) Then
    GroupFieldValue = "#" & GroupFieldValue & "#"
ElseIf Not IsNumeric(GroupFieldValue) Then
    GroupFieldValue = "'" & Replace(GroupFieldValue, "'", "''") & "'"
End If

rs1.Filter = GroupFieldName & "=" & GroupFieldValue
rs1.Sort = MedianFieldName

Set rs = rs1.OpenRecordset()
rs.Move (rs.RecordCount / 2)

If rs.RecordCount Mod 2 = 0 Then
    varMedian1 = rs.Fields(MedianFieldName)
    rs.MoveNext
    fMedian = (varMedian1 + rs.Fields(MedianFieldName)) / 2
Else
    fMedian = rs.Fields(MedianFieldName)
End If

End Function

出典: LessThanDot ウィキ

于 2009-03-12T20:28:21.487 に答える
1

中央値は、VBA を使用せずに通常のクエリのみを使用して MS Access で計算できます。中央値は 50 パーセンタイルです。したがって、通常どおり選択クエリを作成します。次に、SQL ビューに移動し、select キーワードの後に​​「上位 50 パーセント」を含めます。下位 50% を昇順に並べ替えます。上位 50% を降順に並べ替えます。次に、下位パーセントの結果セットの最大値と上位パーセントの結果セットの最小値を見つけます。この2つの平均が中央値です。「上位 50 パーセント」を使用する場合は、クエリの基準が、中央値の計算元となる結果セットに固有のものであることを確認してください。

于 2010-03-04T01:11:40.773 に答える
-1

組み込み関数はありません。そのため、コードを使用してレコードをループし、中央値を自分で計算する必要があります。

Googleを使用してください- そこにはたくさんのコード サンプルがあります

于 2009-03-12T20:22:36.023 に答える