【Access小品】两个联接问题的处理
时 间:2015-07-28 17:33:33
作 者:煮江品茶 ID:10802 城市:武汉
摘 要:【Access小品】两个联接问题的处理
正 文:
中位数是指一组数据由小到大排序后,如果记录条数为奇数则取其中间位置的数据,如果为偶数则取中间两数的平均数。编写中位数查询还是有一些难度的,其难度有二:其一是如何统一记录条数为奇数和偶数的算法,也就是一个算式要同时满足两种情况的运算;其二是如何进行高效率的运算。
为了简化中位数查询的SQL语句,我们可以先编写一个“编号查询”。这个查询中我们解决两个问题,其一是对记录按照分组编出序号;其二是我们设计两个中位数位置。如果记录条数为偶数,比如6条记录,那么有两个中位数分别处于3和4。问题在于当记录条数为奇数时,比如7条记录,中位数处于4,只有一个中位数位置。为了统一中位数算法,我们可以将奇数条数的中位数也看成有两个,也就是两条处于4位置的记录。这样的话,我们就都可以用两条记录的平均数来计算中位数了。为了求出位置一,我们利用了Access中逻辑值的特性(0,-1),这是一个常用的奇巧的算法。由此我们为解决中位数计算的第一个难题做好了准备。
关于第二个难题是计算效率问题,中位数的处理我们可以有多种方法。其中比较容易想到的是在字段上编写子查询或用域函数,但这样的处理运算速度非常慢。比较好的处理时采用联接的方式编写。由此我们可以编写“中位数查询”,在这个查询中,我们用一个分组查询与两个“编号查询”联接,这样就得到了计算中位数的两个值,将这两个值平均一下,也就得到了对应的中位数了。
另外一个关于联接的问题也有点意思。有一个版友给了这样一组数据:
县市 乡镇
衡阳县 湖南张家界市
临湘市 湖南省岳阳地区岳阳市
湘潭县 湖南衡阳县西渡镇
岳阳市 中国湖南湘潭县易俗河镇
其希望处理后得到如下结果:
县市 乡镇
岳阳市 湖南省岳阳地区岳阳市
衡阳县 湖南衡阳县西渡镇
湘潭县 中国湖南湘潭县易俗河镇
这个问题看起来复杂,其实如果用联接的方式处理也十分简单,这个查询中的关键部分在于ON子句的写法,这个写法采用的是逻辑表达式,而不是关系表达式。关于这个问题,可以参见《三层功夫》中的论述。
示例:点击下载此附件
视图:
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)