使用Group By时在Access 2007中计算中位数的最佳方法 [英] Best Way To Calculate A Median In Access 2007 When Using Group By

查看:22
本文介绍了使用Group By时在Access 2007中计算中位数的最佳方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个表,其中包含一本书,然后是关于这本书的多个价格(这是一个高度简化的示例):

ID账面价格
1博克1 10
2博克1 15
3博克1 12
4 BOOK 2 8
5 BOOK2 2

我很容易计算平均值,但一定有好的方法来计算中位数?

当前SQL:

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

结果:

账面平均价格
BOOK 1 12.3333333333333
BOOK2 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;

和用户定义函数(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 Wiki

这篇关于使用Group By时在Access 2007中计算中位数的最佳方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆