热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用sql写每年的第三周_SQL是一门手艺

【公众号:数据驱动增长】SQL不是一门语言,而是一门手艺。把SQL当手艺来学1.行列过滤2.数据变换3.合并连接4.聚合透视奇怪的用法把SQL当手艺来学
ad4dd951df915fc2d0c64122dfa7156e.png

【公众号:数据驱动增长】

SQL不是一门语言,而是一门手艺。

把SQL当手艺来学

1.行列过滤

2.数据变换

3.合并连接

4.聚合透视

奇怪的用法

  • 把SQL当手艺来学

所谓手艺,要求心手相连,每一门手艺的背后,都闪现着手艺人的心血与智慧。SQL也是。

SQL: Structured Query Language,结构化查询语言。实际上也有戏称是标准查询语言的,并不为过,SQL诞生于1974年,基于关系数据库(也就是表格),发展至今毫无衰落迹象,反而渗透到各个数据处理工具/系统中:传统数据库、Hive数据仓库、MongoDB支持类SQL,甚至玩dataframe表格的R语言也可以通过sqldf包写sql,Spark、Flink也可以写SQL,等等。玩数据分析,学好SQL无往而不利。

如果把SQL当语言来学,那么学习路径是单词、语法、技巧,学完后一团乱麻

6db3e593004fbf181ec0b91a9a97135f.png

当手艺来学,就要先修内功——分析思路,再按分析所需的功能学用法,将会无比通畅。试想我们拿到表格形式的数据,要怎么操作分析?16个字:

行列过滤、数据变换、合并连接、聚合透视

以下以hive为例来说,先简化几个表:

9691a8794eb31a0e98ed1864684e15dc.png

1. 行列过滤

select

搞笑视频

从ks.selog表格中找出uid=1002的行中的 seword列。简直就是自然语言啊,你说气人不~

from一个表,select结果也是个表。

2.数据变换

select

iphone, 1iphone, 1android, 2

利用case-when将os变换成id。现在看这一串单词就不觉得头疼了吧。

大部分SQL教程会堆砌各种函数、语法,不怕,我们知道都是为了做数据变换,分门别类的来看:

- 字符串函数:

length(),变upper(),截substr(),拆split(),拼concat()…

- 数值计算:

+-*/模%,舍入round(),随机rand(),取整ceil()floor(),数学sin()…

- 日期函数:

year(),month(),day(),minute(),date_add()…

- json抽取:

get_json_object('{"button":"cancel"}','$.button') 得到cancel

- url参数抽取:

parse_url(a_url, 'HOST'), parse_url(a_url, 'QUERY' , 'speachid')

- 字典取KV:

event_urlparams['speachid']

- 数组取元素:

displayresult[1] 第一条展现结果

- if函数,case子句

- 类型转换: cast('2' as int)

3.合并连接

select

1001,手工耿, 男
1001,央视直播,男
1002,搞笑视频,女
1002, 央视新闻,女

稍微复杂些了。来看其中的关键点,

union all ,将2个格式一致的select查询结果合并。

子查询 () t ,用括号包含查询语句并命名为t,查询结果是一个表格,这是一个隐含表,可以被select。

Join on,把2个表按某个字段连接起来,把右表中的信息连到左表上。

不沉溺于sql中的关键字,用输入一个表操作后输出一个表来看,画一下这个过程

0bc1e55631dcd2d3c08d9c44dcde4100.png

4.聚合透视

select

iphone, 2, 1
android, 1, 1

聚合指按某几列聚合group by,得到的结果是维度列os和指标列sepv计数、seuv去重计数。指标列由聚合函数计算得到,指标列可以直接计算。

透视不是sql强项,一般通过SQL得到聚合的数据,在Excel、Pandas进行透视

e9c6a797fa7279a301262b564755af61.png

16字说完了,其中合并连接是最强大之处,多个表格在不同的地方,非常常见,在SQL里只管按需union join即可。union 好说,列名一致就行,join则会面临左右表要连接的字段参差不齐,也就引申出好多种join,只记基础的3种足够用

f5222544e3756e3d2799624c45c6a258.png

现在挑战一下

select

现在看这一坨臭长的中英文字符还是乱码吗?

[我们理解了1+1=2,那么就很容易理解复变函数和切比雪夫不等式啦 @_@||-_-||]

奇怪的用法

qg1:透视

为了吹SQL,还是写一下sql的透视,闲的慌

select

啥时候会这样枚举结果列?比如数据量很大,Excel搞不定了,又很明确有哪些列可以枚举。比如要对一天内用户的活跃小时进行聚类分析,要得到 就可以这样写sql。

qg2:hive借java能力做数值变换

select

就问骚气不骚气~

qg3:写python代码嵌入sql执行

# python代码,存储为 x.py

--

hive

iphone, 1
iphone, 1
android, 2

再问是不是更骚气~

qg4:行列互转

e584ae7c0a01f4bef37ca4e7abe5081b.png

最后总结一下:

1.行列过滤

2.数据变换

3.合并连接

4.聚合透视

这不是一篇教程,要教程去官网看,详细到每一个关键字,够看好几天;

这只是一个视角。

不要满脑子想select from where group,而想我要对表格的数据做什么,SQL这个工具能帮我,工具练熟了心手合一,就掌握了一门手艺。

荒年饿不死手艺人

【公众号:数据驱动增长】



推荐阅读
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路
    本文介绍了FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路。当图表系列较多时,用户希望可以自己设置哪些系列显示,哪些系列不显示。通过调用FR.Chart.WebUtils.getChart("chartID").getChartWithIndex(chartIndex).setSeriesVisible()接口,可以获取需要显示的系列图表对象,并在表单中显示这些系列。本文以决策报表为例,详细介绍了实现方法,并给出了示例。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了如何对PHP二维数组进行排序以及如何获取最大值。同时还提到了在数据分析系统中使用排序的实例,以及如何统计角色等级和创建角色总数。 ... [详细]
author-avatar
手机用户2602914827
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有