Noa*_*ahD 4 sql ms-access ms-access-2007 median
我有一个表,其中包含一本书,然后包含该书的多个价格(这是一个高度简化的示例):
身份证价格 1 本书1 10 2 书 1 15 3 书 1 12 4 书2 8 5 书2 2
我很容易计算平均值,但是一定有一个很好的方法来计算中位数吗?
当前SQL:
SELECT DISTINCTROW Books.BOOK, Avg(Books.PRICE) AS [Avg Of PRICE]
FROM Books
GROUP BY Books.BOOK;
Run Code Online (Sandbox Code Playgroud)
结果:
预订平均价格 书1 12.3333333333333 书2 5
Jet SQL 中没有中位数,除非它是在 2007 年添加的,但这里有一个如何获取中位数的想法。你会需要 ...
一些SQL...
SELECT Statistics.Month, Sum(([SentTo])) AS [Sum Sent], fMedian("Statistics","Month",[Month],"SentTo") AS [Median Sent]
FROM Statistics
GROUP BY Statistics.Month;
Run Code Online (Sandbox Code Playgroud)
以及用户定义函数 (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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21722 次 |
| 最近记录: |