【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)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- 【Access Inputbo...(12.23)
- 【Access Dsum示例】...(12.16)

学习心得
最新文章
- 仓库管理实战课程(8)-商品信息功...(04.01)
- 仓库管理实战课程(7)-链接表(03.31)
- 仓库管理实战课程(6)-创建查询(03.29)
- 仓库管理实战课程(5)-字段属性(03.27)
- 设备装配出入库管理系统;基于Acc...(03.24)
- 仓库管理实战课程(4)-建表操作(03.22)
- 仓库管理实战课程(3)-需求设计说...(03.19)
- 仓库管理实战课程(2)-软件背景和...(03.18)
- 仓库管理实战课程(1)-讲师介绍(03.16)
- 统计当月之前(不含当月)的记录数怎...(03.11)