Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

返回列表 發(fā)新帖
查看: 5219|回復(fù): 6
打印 上一主題 下一主題

[模塊/函數(shù)] 【Access小品】入鄉(xiāng)隨俗 -- 中位數(shù)函數(shù)示例

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2015-7-24 17:23:43 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  版友羽竹w同志問(wèn)如何分組查詢求某字段的中位數(shù)。在分組查詢中可以用到的統(tǒng)計(jì)函數(shù)有限,沒(méi)有現(xiàn)成的求中位數(shù)的函數(shù)。如果直接編寫(xiě)查詢語(yǔ)句會(huì)比較麻煩,所以解決此類問(wèn)題,宜采用自定義函數(shù)的方法。

  除了SQL中有域函數(shù)外,VBa也存在域函數(shù)。所謂“域”,也就是字段,所以域函數(shù)是針對(duì)字段的函數(shù),一般用于二維表的縱向計(jì)算。VBa中的域函數(shù)具有顯著的特征,其一是函數(shù)名以大寫(xiě)的D開(kāi)頭,其二是形參依次為字段名、表名、條件。

  求某字段的中位數(shù)的函數(shù),實(shí)際上就是一種域函數(shù)。所以編寫(xiě)這類自定義函數(shù)時(shí),我們可以入鄉(xiāng)隨俗,按照系統(tǒng)域函數(shù)的特點(diǎn)進(jìn)行編寫(xiě)。這樣處理的好處是,可以使其他程序人員快速的理解和使用。

  什么是中位數(shù)呢?所謂中位數(shù)就是一組數(shù)據(jù)排序后處于中間位置的那個(gè)數(shù)。當(dāng)這組數(shù)據(jù)的個(gè)數(shù)是奇數(shù)時(shí),這不難處理。當(dāng)個(gè)數(shù)為偶數(shù)時(shí),則需要取中間兩數(shù)的平均值。明白了這個(gè)概念,編寫(xiě)一個(gè)自定義函數(shù)就不困難了。我們可以寫(xiě)成如下:

Public Function DMedian(ByVal fieldname As String, ByVal tbname As String, ByVal wh As String) As Double
    '功能:返回中位數(shù)
    '參數(shù):fieldname -- 求中位數(shù)的字段名稱
    '      tbname -- 表或查詢名稱
    '      wh -- 篩選條件
    Dim rs As New ADODB.Recordset
    Dim ssql As String
    Dim i As Long
    Dim cnt As Long
    Dim d As Double
   
    ssql = "select " & fieldname & " from " & tbname & " where " & wh & " order by " & fieldname
    rs.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    cnt = rs.RecordCount
    If cnt Mod 2 = 0 Then
        '記錄條數(shù)為偶數(shù)取中間兩個(gè)數(shù)字的平均數(shù)
        i = Int(cnt / 2)
        rs.Move i - 1
        d = rs.Fields(fieldname).Value
        rs.MoveNext
        d = d + rs.Fields(fieldname).Value
        d = d / 2
    Else
        '記錄條數(shù)為奇數(shù)取中間數(shù)字
        i = Int(cnt / 2) + 1
        rs.Move i - 1
        d = rs.Fields(fieldname).Value
    End If
    rs.Close: Set rs = Nothing
    DMedian = d
End Function


示例:

視圖:


本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖1 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2015-7-24 20:06:42 | 只看該作者
學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

3#
發(fā)表于 2015-7-25 08:25:55 | 只看該作者
什么是中位數(shù)呢?所謂中位數(shù)就是一組數(shù)據(jù)排序后處于中間位置的那個(gè)數(shù)。
4#
發(fā)表于 2015-7-25 08:26:54 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

5#
發(fā)表于 2016-8-14 17:31:02 | 只看該作者
outlook有沒(méi)有錄制宏之類的功能呢
6#
發(fā)表于 2016-8-14 17:31:18 | 只看該作者
outlook有沒(méi)有錄制宏之類的功能呢
7#
發(fā)表于 2016-8-20 11:05:00 | 只看該作者
已經(jīng)下載學(xué)習(xí)
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-16 18:24 , Processed in 0.101616 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表