`
isiqi
  • 浏览: 16356187 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Sql Hacks 阅读感悟——数值处理

阅读更多

SQL基础:《SQL HACKS》第5章——数值处理,总共列举了17tips,计算结果集的乘积、计算累加和、包含Join遗忘的行等,下述为我对这17tips的评析。

#24 计算结果集的乘积

情景描述:计算多列的乘积

解决方案:通过数学手段,将乘积转换为对数加法运算,log(a*b*c) = log(a)+log(b)+log(c)

评析:sql中数值处理,很多都是基于数学手段,如刚才的指数函数、对数函数,后续tips中提到的中位数、gps定位距离计算等。

#25 计算累加和

情景描述:表中存储了每日的收支情况,要求计算每日的收支余额

解决方案:根据时间发生顺序做表自连,计算累加和

评析:熟练使用汇聚函数如sum,可以有效进行行汇总。通常在财务等处理上,我们记录的都是每日发生额,要计算每日的现金、银行存款余额就需要计算累加和。

#26 包含Join遗忘的行

情景描述:在连表时,我们经常会遗漏null条件的记录。如求每位员工的2月份出勤信息时,假设员工A没有2月份请病假,没有出勤记录,则通过连表员工信息表、考勤信息表时,就会略去员工A(给人感觉员工A离职了)。

解决方案:通过外联,null用特殊值(如0)来代替处理。

评析:合理利用外联,处理好null会有很多妙用。

#27 识别重叠范围

情景描述:求职人员有期望薪金区间required, r= [l,h],提供的工作有薪金范围offered, o= [l,h],寻找requiredoffered有交集的行记录。

解决方案:如何判断requiredoffered是否有交集,可以直接的用下述来表示,

1r.h<=o.l

2) r.l>=o.l and r.h>=o.h

3) r.l<=o.l and r.h<=o.h

评析:区间比对的情况往往可以用边界值做反比可以解决问题,如果编辑值为null,则需要将null做最小、最大化处理。如上述的比较则完全可以用

r.h>=o.l and r.l<=o.h

#28避免零做除数

评析:转换nullsql中有很多null转换处理函数,如pgsqlcoalesce

#29 计算行数的其它途径

评析:计算行数有 select count(*), select count(1), select count(字段),需要注意的是如果用select count(字段)计算行数的话,则如果值为null,则会被略去。因此select count(*) 得到10的话,用 select count(字段)得到的可能是9

#30 计算2个字段的最大值

情景描述:2个字段xy,计算xy的最大值

解决方案:运用数学手段实现,(x+y+abs(x-y))/2,实现x,y的最大值

评析:简单、灵活运用数学手段即可解决复杂问题,当然用case when x>y then x else y end也可实现x,y的最大值。

#31 反聚合count

评析:反计数问题是sql中一个比较难处理的问题,通常可以通过使用一个整数表来解决这个问题。如本案的新建integers表,create table integers(n integer);

#32 服舍入误差

情景描述:计算某个字段的百分比值,如销售额amount,折扣率percent,求销售折扣。

解决方案:销售折扣 = 销售额 * 折扣率,貌似很简单,但是如涉及到汇总即小数位截位问题的话,则很有可能出现舍入误差。增加计算列 f=round(amount+percent,2),然后对f汇总即可。

评析:对于小数截位问题,我们一定要注意舍入误差问题。对于本案要嘛先截后加,要嘛先加后截,切忌边截边加。

#33 同时得到值和小计

情景描述:给定记录集合S,要求用sql语句得到集合集合TT=S U S的小计。

解决方案:得到S的小计 然后 union S 并按照特定列排序即可同时得到值和小计。

评析:该处实际上就是select union方式的运用,那么我们就要注意INTERSECTEXCEPT的运用。

#34 计算中位数

情景描述:给定从小到大排序的集合S,找出S中间位置的元素,奇数集合时为第(n+1)/2个元素,偶数集合时为第n/2,n/2+1元素的平均值。

解决方案:创建临时表得到带有从小到大排序位置信息(简单理解为行号)的新集合N,然后利用N根据简单的中位数算法即可求解中位数。

Select avg(minutes) from taski, (select count(*) n from task) t

Where posn in (floor(n+1)/2, floor(n/2)+1)

评析:个人认为类似计算中位数,应该在具体应用去实现,或者定义成一个存储过程或者函数(pgsql 是函数)。但是,计算中位数中用到的一个技巧得到行号(posn)是一个很有用的tip

#35 将结果展示为图表

评析:本tip核心就是字串函数的灵活运用,如填充字符串repeat, lpad等。

#36 计算GPS定位之间的距离

评析:本tips核心就是数学知识几何学的运用,因此不予展开。

#37 让货物清单和支付清单对应起来

评析:本例的一个典型应用就是会计行业的银行对账,会计人员总是会做银行对账单和银行、现金发生额间的勾稽关系。由于具体的应用有其特殊的技巧,因此本tip不予展开。

#38 找出换位错误

评析:本案类似于#37,没对上的那个肯定是录错了。但是本案有个技巧需要引起我们的注意,那就是快速定位换位错误。发生误差为9的倍数时,我们首先想到的是录入的时候发生了换位错误,入102录成了120等。

误差18,为92倍,则发生换位错误的可能组合为02, 13, 24, 35, 57, 68, 79。因此我们只要查找02,13,24,35,57,68,79结尾的值即可马上定位到发生换位错误的那个值。

#39 计算累进税

评析:作者对税级低限、税级高限边界值的灵活处理以及巧妙的crossjoin得到了纳税人员的累进税额。个人认为,由于税率表、人员信息表都是基本信息表记录数是有限的给定集合,因此可以编写一个函数getFunctionalTax(),传入纳税人员的收入,输出纳税人员的累进税额,更加可取。

#40 计算名次

评析:rank函数的应用。

分享到:
评论

相关推荐

    SQL Hacks 100个业界最尖端的技巧和工具 读书笔记 第一章

    本人正在读O'reilly的SQL Hacks这本书,深深的被这些sql技巧所吸引。作为一个程序员,如果能够在合适的地方用上精巧的sql语句,能够给开发带来无与伦比的轻巧与快捷。如果你的基础较好的话,应该只用看这个读书笔记...

    《SQL HACKS》

    本书包含了100个排序、筛选、打乱数据的技巧,大大增强了传统SQL语句的功能。通过本书,你可以学习到: ● 从命令行和程序往数据库发送SQL命令。 ● 使用高级的联合、过滤和分组技术,为数据报表获得数据。 ● 解决...

    sql hacks sql语言学习圣经

    sql语言学习圣经 老外写的 书不厚但是很好,值得细细读

    Debug Hacks中文版 深入调试的技术和工具

    不过,从描述和标签可以推测,《Debug Hacks中文版》将会是一本深入讲解Linux下调试技术与工具的实用书籍,适合那些希望提高自己软件调试能力的程序员和软件工程师阅读。在阅读过程中,建议读者能结合实际编程环境和...

    SQL.Hacks.Nov.2006

    《SQL.Hacks.Nov.2006》这本书聚焦于SQL语言在主流数据库系统中的高效应用,涵盖了Oracle、MySQL和SQL Server等多个平台。SQL(Structured Query Language),即结构化查询语言,是用于管理关系数据库的标准语言,...

    SQL_HACKS:100个业界最尖端的技巧和工具(part3)

    SQL_HACKS:100个业界最尖端的技巧和工具,电子书,高清版

    Debug Hacks中文版—深入调试的技术和工具.pdf

    由于提供的内容不足以推断出具体的知识点,我将基于标题《Debug Hacks中文版—深入调试的技术和工具》来构建相关知识点。请注意,以下内容是基于假设的文档内容,实际的知识点可能与此有所不同。 在计算机科学中,...

    sqlhacks100个业界最尖端的技巧和工具

    通过阅读《SQL Hacks》,你不仅可以掌握SQL的基础知识,还能学习到许多专家级别的技巧,这些技巧将使你在处理数据时更加得心应手。无论是在商业智能、数据分析还是软件开发领域,这本书都能成为你不可或缺的参考资料...

    SQL_HACKS:100个业界最尖端的技巧和工具(part1)

    SQL HACKS 100个业界最尖端的技巧和工具,好不容易找到的资源

    SQL_HACKS:100个业界最尖端的技巧和工具(part2)

    SQL_HACKS:100个业界最尖端的技巧和工具,高清,好不容易找到

    Google.Hacks.探索和利用全球信息资源的技巧和工具——英文版

    ### Google.Hacks:探索和利用全球信息资源的技巧和工具 #### 核心知识点概览 本书《Google.Hacks》是一本深入探索Google搜索引擎高级应用技术的书籍,它不仅介绍了如何高效地使用Google进行信息搜索,还展示了...

    swing hacks 文档+code

    4. 事件处理:Swing Hacks会讲解如何高效地处理用户交互事件,包括键盘事件、鼠标事件和动作事件。这些技巧能帮助开发者构建响应快速且用户友好的应用。 5. 模型-视图-控制器(MVC)模式:Swing遵循MVC设计模式,...

    50 Android Hacks.pdf

    根据提供的信息,“50 Android Hacks.pdf”似乎是一份关于Android系统高级技巧和优化方法的手册。虽然在给出的部分内容中并未直接提及具体的技术细节,但从文件标题、描述及标签可以推断出这份文档主要围绕Android...

    Linux Server Hacks

    从标题来看,这本书更侧重于教授读者一些高效、快捷的技巧(hacks),从而使得处理Linux服务器相关任务更加得心应手。描述中的“Tips Tools”提示读者这本书会提供具体的技巧和实用工具,而“Connecting Monitoring ...

    Vim-101-hacks、Sed-and-Awk-101-Hacks、Linux-101-hacks 英文版(高清)PDF

    在IT领域,文本编辑器Vim、流处理工具Sed和Awk以及操作系统Linux是三个极其重要的基础工具。这些工具的高效使用对于任何系统管理员、开发者或是IT专业人员来说都是必不可少的技能。以下是对这三个主题的详细解释: ...

    Google Hacks 2nd Edition

    本书标签“goolge hacks”暗示了内容的核心——揭示Google的未被广泛知晓的技巧和窍门,这些技巧可以帮助用户在日常搜索、数据分析、甚至是网络开发中取得突破。 在压缩包中的“Google Hacks 2nd Edition.chm”文件...

    sed and awk 101 hacks.pdf

    - **使用printf格式化输出、awk内置数值函数、随机数生成器、常用字符串函数、GAWK/NAWK的字符串函数、处理参数、OFMT、GAWK内置的环境变量、pgawk–awk运行分析器、位操作、用户自定义函数、使输出摆脱语言依赖、...

    Ajax Hacks源码.rar

    《Ajax Hacks》这本书主要探讨了如何利用Ajax技术来创建交互性强、响应迅速的Web应用程序。Ajax(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,能够更新部分网页内容的技术。它通过后台与...

    swing-hacks.zip

    《Swing Hacks》是一本深受Java开发者喜爱的书籍,专注于Swing技术的深入学习与实践。这本书籍包含了丰富的Swing组件使用技巧和创新性的编程方法,帮助开发者挖掘Swing库的潜能,提升应用程序的用户体验。书中涵盖的...

    Greasemonkey Hacks

    Greasemonkey Hacks.chm

Global site tag (gtag.js) - Google Analytics