专栏首页小数志SQL用了两年多,我最常用的2个小技巧

SQL用了两年多,我最常用的2个小技巧

导读

SQL是所有数据从业者必须打牢的基本功之一,扎实的SQL查询和适当的调优技巧是检验SQL能力的两大重要准则。个人曾经专门花费过好多时间用于提升SQL能力,期间也刷了大量的SQL题目,在这期间也不断摸索总结了一些小技巧,今天本文就来分享其中的两个,也差不多是日常使用中最为高频的两个了。

5分钟学会的两个小技巧

为了配合演示这两个小技巧,本文所使用示例数据如下,其实这也是前几天推文中所使用的数据:

示例学生成绩表

01 SQL的数据类型隐式转换

很多编程语言都限定了数据类型,例如在Python中字符串"0"和数值0是不相等的,布尔型True和数值1也是不相等,但在SQL中则不然,其内置了数据类型隐式转换功能,所以执行查询 select "0"=0 会返回1的,这既说明字符串"0"和数值0是相等的,也说明SQL中的布尔值会自动转换为1或0。

利用这一小技巧,在实现很多统计指标时就可以有很多小技巧。例如计算学生成绩表中每名学生的成绩的优秀率,即成绩在90分以上的科目与本人总科目的占比。为实现这一查询,常规的操作是分别统计每名学生成绩在90分以上的科目数量和总科目,然后进行相除得到占比。

实际上,在给出前述小例子的基础上,这一需求可以如下实现:

其中,在每名学生的分组中,条件判断score>=90返回一组0或1的结果,对这组0/1取值进行求均值操作,即等价于求成绩>=90的科目占比。

02 巧妙运用if函数和null

SQL内置了众多函数,但对于一名程序员而言if函数应该尤为常见和常用;另一方面,null值也是SQL中一个神奇的存在,它有两大特性:一是任何值与null的任何计算都会得到null值;二是在任何聚合函数中,null值都不参与计算(例如,count计数就是查找null以外的结果数量)。配合使用if函数和null值,有时也可实现很好的效果。

例如,仍然针对以上学生成绩表,需要分别统计每名学生成绩在80分以上成绩的平均值,也就是如果成绩>=80则参与最后均值计算,否则不参与。配合if函数和null的特性,可以如下优雅的实现:

实际上,上述查询语句中,首先通过if函数衍生一个临时字段if(score>=80, score, null)其取值为:成绩≥80时取成绩值,否则置为null,即相当于仅保留了成绩在80分以上的记录;而后嵌套一层avg函数即直接实现了计算80分以上平均值的效果。

当然,对于这一需求也可以先用where条件过滤出成绩在80分以上的记录后再聚合统计。

本文分享自微信公众号 - 小数志(Datazhi),作者:luanhz

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最值得你收藏的30个Python常用小技巧!

    [0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000, 121, 144, 169, 196, 225,...

    一墨编程学习
  • 我去,这两个小技巧,让我的SQL语句不仅躲了坑,还提升了 1000 倍(半分钟干货系列)

    本次来讲解与 SQL 查询有关的两个小知识点,掌握这些知识点,能够让你避免踩坑以及提高查询效率。

    帅地
  • SQL优化二(SQL性能调优)

    一·、前言:这篇博文内容非原创,是我们公司的架构师给我们做技术培训的时候讲的内容,我稍微整理了下,借花献佛。这篇博文只是做一个大概的科普介绍,毕竟SQL优化的知...

    JMCui
  • Java数据库编程中的技巧

    Java数据库编程中的技巧,Java数据库编程中的技巧 1、java数据库操作基本流程 ? 2、几个常用的重要技巧: 可滚动、更新的记录集 批量更新 事务处理 ...

    企鹅号小编
  • 不得不看,只有专家才知道的17个SQL查询提速秘诀!

    “ 除非你遵循本文介绍的这些技巧,否则很容易编写出减慢查询速度或锁死数据库的数据库代码。 ? 由于数据库领域仍相对不成熟,每个平台上的 SQL 开发人员都在苦苦...

    企鹅号小编
  • PHP利用递归函数实现无限级分类的方法

    相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径。各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制...

    砸漏
  • 【学习】1月份推荐给程序员们的技术书书单

    时光飞逝,不知不觉,微信君已经和小伙伴们走过了2014,感谢你们的支持。小编会在2015年加倍努力,与你们一起分享好书。 2015年,首月,好多技术书的付印计划...

    小莹莹
  • 对mysql日志进行操作的总结包括 启用,过期自动删除 等

    近段时间一直在研究mysql的日志系统,在网上看了N多mysql日志操作的文章,但都过于零乱,为了让自己以后不再搞忘,特作出以下总结:

    用户7657330
  • EMPS:个人做数据分析处理的4重境界

    自从事数据科学行业以来,便每天在与各种数据处理打交道,当然这里的数据处理是多方面的:既有数据采集和读写,也有数据清洗与变换,当然还有数据分析和挖掘。从主用工具的...

    luanhz
  • SQL 进阶技巧(上)

    由于工作需要,最近做了很多 BI 取数的工作,需要用到一些比较高级的 SQL 技巧,总结了一下工作中用到的一些比较骚的进阶技巧,特此记录一下,以方便自己查阅,主...

    kunge
  • 微信热传的 100+ 经典技术文章

    阿炬
  • 每日思考第 86 期:一个程序员的酒后真言

    大家面对建议,不要盲抄,一定要结合自身实际情况实际场景,慎重吸收和运用,比如第一条换公司,如果很频繁其实对职场成长以及面试官印象对是不太好的,如果是成长瓶颈或是...

    蜗牛互联网
  • 以技术面试官的经验分享毕业生和初级程序员通过面试的技巧(Java后端方向)

    本来想分享毕业生和初级程序员如何进大公司的经验,但后来一想,人各有志,有程序员或许想进成长型或创业型公司或其它类型的公司,所以就干脆来分享些提升技能和通过面试的...

    Java团长
  • 性能优化总结(一):前言

        最近一直忙着学2010、WPF、看架构师教程、学英语,搞得都没时间写博客了。     最近在GIX4项目上做了一些性能方面的优化,为了方便和同事们分享经...

    用户1172223
  • 数据分析必备!Pandas实用手册(PART III)

    ? https://colab.research.google.com/drive/1WhKCNkx6VnX1TS8uarTICIK2ViPzNDjw

    NewBeeNLP
  • 年底了,如何准备 Java 初级和高级的技术面试?

    本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不...

    Java技术栈
  • 《Pandas 练习 75 题 原版》、《Python 一行代码》、《Pandas 数据分析小技巧系列》汇总

    最近两周周末也都加班,只能利用有限的业余时间,写写深爱着的公众号文章,三年来从未改变过,因为有一个又一个你在守候。

    double
  • 面试中更多会考核相关技能的项目经验——再论程序员该如何准备面试如何准备Java面试?

    这篇博文后,提到了不少引导的说辞和技巧,如果能把面试官的提问引导到事先准备好的亮点上,一方面确实可以更有效地耗费面试时间,另一方面也能最大程度地挖掘和展示自己的...

    用户1153489
  • SQL | 数据分析面试必备SQL语句+语法

    前些天在网上冲浪的时候看到一个案例咨询,问说世界500强的数据分析要不要去,评论区一片爆炸:“楼主能分享一下文科生怎么转行做数据分析吗??”、“SQL、pyth...

    咸鱼学Python

扫码关注云+社区

领取腾讯云代金券