設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

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

[查詢] 【Access小品】兩個(gè)聯(lián)接問題的處理

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2015-7-28 17:30:04 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 todaynew 于 2015-7-28 17:57 編輯

  前日里為一版友解決中位數(shù)問題,曾寫《入鄉(xiāng)隨俗》一文,在該文中對中位數(shù)采用自定義函數(shù)方式處理。這種方法存在一個(gè)問題,就是當(dāng)Access做后臺(tái)時(shí),其中的查詢?nèi)绻{(diào)用自定義函數(shù)的話,那么數(shù)據(jù)是無法在前臺(tái)讀出來的。究其原因大概是Access不像SQL SERVER可以提供數(shù)據(jù)庫服務(wù),它不能自動(dòng)運(yùn)行后臺(tái)的程序和自定義函數(shù)。由于這樣的一個(gè)原因,就需要采用SQL語句來直接編寫后臺(tái)的查詢,以便前臺(tái)的調(diào)用。

  中位數(shù)是指一組數(shù)據(jù)由小到大排序后,如果記錄條數(shù)為奇數(shù)則取其中間位置的數(shù)據(jù),如果為偶數(shù)則取中間兩數(shù)的平均數(shù)。編寫中位數(shù)查詢還是有一些難度的,其難度有二:其一是如何統(tǒng)一記錄條數(shù)為奇數(shù)和偶數(shù)的算法,也就是一個(gè)算式要同時(shí)滿足兩種情況的運(yùn)算;其二是如何進(jìn)行高效率的運(yùn)算。

  為了簡化中位數(shù)查詢的SQL語句,我們可以先編寫一個(gè)“編號(hào)查詢”。這個(gè)查詢中我們解決兩個(gè)問題,其一是對記錄按照分組編出序號(hào);其二是我們設(shè)計(jì)兩個(gè)中位數(shù)位置。如果記錄條數(shù)為偶數(shù),比如6條記錄,那么有兩個(gè)中位數(shù)分別處于3和4。問題在于當(dāng)記錄條數(shù)為奇數(shù)時(shí),比如7條記錄,中位數(shù)處于4,只有一個(gè)中位數(shù)位置。為了統(tǒng)一中位數(shù)算法,我們可以將奇數(shù)條數(shù)的中位數(shù)也看成有兩個(gè),也就是兩條處于4位置的記錄。這樣的話,我們就都可以用兩條記錄的平均數(shù)來計(jì)算中位數(shù)了。為了求出位置一,我們利用了Access中邏輯值的特性(0,-1),這是一個(gè)常用的奇巧的算法。由此我們?yōu)榻鉀Q中位數(shù)計(jì)算的第一個(gè)難題做好了準(zhǔn)備。

  關(guān)于第二個(gè)難題是計(jì)算效率問題,中位數(shù)的處理我們可以有多種方法。其中比較容易想到的是在字段上編寫子查詢或用域函數(shù),但這樣的處理運(yùn)算速度非常慢。比較好的處理時(shí)采用聯(lián)接的方式編寫。由此我們可以編寫“中位數(shù)查詢”,在這個(gè)查詢中,我們用一個(gè)分組查詢與兩個(gè)“編號(hào)查詢”聯(lián)接,這樣就得到了計(jì)算中位數(shù)的兩個(gè)值,將這兩個(gè)值平均一下,也就得到了對應(yīng)的中位數(shù)了。


  另外一個(gè)關(guān)于聯(lián)接的問題也有點(diǎn)意思。有一個(gè)版友給了這樣一組數(shù)據(jù):

縣市           鄉(xiāng)鎮(zhèn)
衡陽縣        湖南張家界市
臨湘市        湖南省岳陽地區(qū)岳陽市
湘潭縣        湖南衡陽縣西渡鎮(zhèn)
岳陽市        中國湖南湘潭縣易俗河鎮(zhèn)

  其希望處理后得到如下結(jié)果:

縣市           鄉(xiāng)鎮(zhèn)
岳陽市        湖南省岳陽地區(qū)岳陽市
衡陽縣        湖南衡陽縣西渡鎮(zhèn)
湘潭縣        中國湖南湘潭縣易俗河鎮(zhèn)

  這個(gè)問題看起來復(fù)雜,其實(shí)如果用聯(lián)接的方式處理也十分簡單,這個(gè)查詢中的關(guān)鍵部分在于ON子句的寫法,這個(gè)寫法采用的是邏輯表達(dá)式,而不是關(guān)系表達(dá)式。關(guān)于這個(gè)問題,可以參見《三層功夫》中的論述。

示例:

視圖:

本帖子中包含更多資源

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

x

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖1 訂閱訂閱
2#
發(fā)表于 2015-7-28 22:29:19 | 只看該作者
收藏。。。。。。。。。謝謝分享。
3#
發(fā)表于 2016-8-20 11:03:36 | 只看該作者
已經(jīng)下載學(xué)習(xí)
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

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

GMT+8, 2025-7-13 08:10 , Processed in 0.097548 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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