热门标签 | 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这个工具能帮我,工具练熟了心手合一,就掌握了一门手艺。

荒年饿不死手艺人

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



推荐阅读
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 文章目录Golang定时器Timer和Tickertime.Timertime.NewTimer()实例time.AfterFunctime.Tickertime.NewTicke ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 在处理数据库中所有用户表的彻底清除时,目前尚未发现单一命令能够实现这一目标。因此,需要采用一种较为繁琐的方法来逐个删除相关表及其结构。具体操作可以通过编写PL/SQL脚本来实现,该脚本将动态生成并执行删除表的SQL语句。尽管这种方法相对复杂,但在缺乏更简便手段的情况下,仍是一种有效的解决方案。未来或许可以通过数据库管理工具或更高版本的数据库系统提供更简洁的处理方式。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 字节跳动深圳研发中心安全业务团队正在火热招募人才! ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 探索Web 2.0新概念:Widget
    尽管你可能尚未注意到Widget,但正如几年前对RSS的陌生一样,这一概念正逐渐走入大众视野。据美国某权威杂志预测,2007年将是Widget年。本文将详细介绍Widget的定义、功能及其未来发展趋势。 ... [详细]
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社区 版权所有