SQL基础:《SQL HACKS》第5章——数值处理,总共列举了17个tips,计算结果集的乘积、计算累加和、包含Join遗忘的行等,下述为我对这17个tips的评析。
#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],寻找required和offered有交集的行记录。
解决方案:如何判断required和offered是否有交集,可以直接的用下述来表示,
1)r.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避免零做除数
评析:转换null,sql中有很多null转换处理函数,如pgsql的coalesce
#29 计算行数的其它途径
评析:计算行数有 select count(*), select count(1), select count(字段),需要注意的是如果用select count(字段)计算行数的话,则如果值为null,则会被略去。因此select count(*) 得到10的话,用 select count(字段)得到的可能是9。
#30 计算2个字段的最大值
情景描述:2个字段x、y,计算x、y的最大值
解决方案:运用数学手段实现,(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语句得到集合集合T,T=S U S的小计。
解决方案:得到S的小计 然后 union S 并按照特定列排序即可同时得到值和小计。
评析:该处实际上就是select union方式的运用,那么我们就要注意INTERSECT、EXCEPT的运用。
#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,为9的2倍,则发生换位错误的可能组合为02, 13, 24, 35, 57, 68, 79。因此我们只要查找02,13,24,35,57,68,79结尾的值即可马上定位到发生换位错误的那个值。
#39 计算累进税
评析:作者对税级低限、税级高限边界值的灵活处理以及巧妙的crossjoin得到了纳税人员的累进税额。个人认为,由于税率表、人员信息表都是基本信息表记录数是有限的给定集合,因此可以编写一个函数getFunctionalTax(),传入纳税人员的收入,输出纳税人员的累进税额,更加可取。
#40 计算名次
评析:rank函数的应用。
分享到:
相关推荐
本人正在读O'reilly的SQL Hacks这本书,深深的被这些sql技巧所吸引。作为一个程序员,如果能够在合适的地方用上精巧的sql语句,能够给开发带来无与伦比的轻巧与快捷。如果你的基础较好的话,应该只用看这个读书笔记...
本书包含了100个排序、筛选、打乱数据的技巧,大大增强了传统SQL语句的功能。通过本书,你可以学习到: ● 从命令行和程序往数据库发送SQL命令。 ● 使用高级的联合、过滤和分组技术,为数据报表获得数据。 ● 解决...
sql语言学习圣经 老外写的 书不厚但是很好,值得细细读
不过,从描述和标签可以推测,《Debug Hacks中文版》将会是一本深入讲解Linux下调试技术与工具的实用书籍,适合那些希望提高自己软件调试能力的程序员和软件工程师阅读。在阅读过程中,建议读者能结合实际编程环境和...
《SQL.Hacks.Nov.2006》这本书聚焦于SQL语言在主流数据库系统中的高效应用,涵盖了Oracle、MySQL和SQL Server等多个平台。SQL(Structured Query Language),即结构化查询语言,是用于管理关系数据库的标准语言,...
SQL_HACKS:100个业界最尖端的技巧和工具,电子书,高清版
由于提供的内容不足以推断出具体的知识点,我将基于标题《Debug Hacks中文版—深入调试的技术和工具》来构建相关知识点。请注意,以下内容是基于假设的文档内容,实际的知识点可能与此有所不同。 在计算机科学中,...
通过阅读《SQL Hacks》,你不仅可以掌握SQL的基础知识,还能学习到许多专家级别的技巧,这些技巧将使你在处理数据时更加得心应手。无论是在商业智能、数据分析还是软件开发领域,这本书都能成为你不可或缺的参考资料...
SQL HACKS 100个业界最尖端的技巧和工具,好不容易找到的资源
SQL_HACKS:100个业界最尖端的技巧和工具,高清,好不容易找到
### Google.Hacks:探索和利用全球信息资源的技巧和工具 #### 核心知识点概览 本书《Google.Hacks》是一本深入探索Google搜索引擎高级应用技术的书籍,它不仅介绍了如何高效地使用Google进行信息搜索,还展示了...
4. 事件处理:Swing Hacks会讲解如何高效地处理用户交互事件,包括键盘事件、鼠标事件和动作事件。这些技巧能帮助开发者构建响应快速且用户友好的应用。 5. 模型-视图-控制器(MVC)模式:Swing遵循MVC设计模式,...
根据提供的信息,“50 Android Hacks.pdf”似乎是一份关于Android系统高级技巧和优化方法的手册。虽然在给出的部分内容中并未直接提及具体的技术细节,但从文件标题、描述及标签可以推断出这份文档主要围绕Android...
从标题来看,这本书更侧重于教授读者一些高效、快捷的技巧(hacks),从而使得处理Linux服务器相关任务更加得心应手。描述中的“Tips Tools”提示读者这本书会提供具体的技巧和实用工具,而“Connecting Monitoring ...
在IT领域,文本编辑器Vim、流处理工具Sed和Awk以及操作系统Linux是三个极其重要的基础工具。这些工具的高效使用对于任何系统管理员、开发者或是IT专业人员来说都是必不可少的技能。以下是对这三个主题的详细解释: ...
本书标签“goolge hacks”暗示了内容的核心——揭示Google的未被广泛知晓的技巧和窍门,这些技巧可以帮助用户在日常搜索、数据分析、甚至是网络开发中取得突破。 在压缩包中的“Google Hacks 2nd Edition.chm”文件...
- **使用printf格式化输出、awk内置数值函数、随机数生成器、常用字符串函数、GAWK/NAWK的字符串函数、处理参数、OFMT、GAWK内置的环境变量、pgawk–awk运行分析器、位操作、用户自定义函数、使输出摆脱语言依赖、...
《Ajax Hacks》这本书主要探讨了如何利用Ajax技术来创建交互性强、响应迅速的Web应用程序。Ajax(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,能够更新部分网页内容的技术。它通过后台与...
《Swing Hacks》是一本深受Java开发者喜爱的书籍,专注于Swing技术的深入学习与实践。这本书籍包含了丰富的Swing组件使用技巧和创新性的编程方法,帮助开发者挖掘Swing库的潜能,提升应用程序的用户体验。书中涵盖的...
Greasemonkey Hacks.chm