这两周真的是被客户搞怕了, 我一个数据分析师, 干着比程序员还复杂的活, 拿着文员的工资, 看这我每天下班的打卡时间, 感觉我一点求生欲都没有,真的不知道图啥. 快速理解业务, 马上建数据库表, 写后台 sql, 然后做前台网页看板,, 还要帮业务写小程序, 和帮他们处理 Excel, 还要给他们爬数据... 这尼玛要我全能嘛? 尤其吐槽一波, 数据采集, 他们用的 RPA, 自动化ERP 这种没有接口的, 我觉得很强大, 但就操作下浏览器, 爬个数据, 搞来搞去,着实有些烦, 还要按流程写才让上线....我是欣赏不来. 我感觉有点low, 有种感觉就是, 好比我已经大学毕业2年了, 然后突然告诉我, 不合格, 要从头从大一开始读..... 这不是倒退嘛? 我肯定是不接受倒退的, 宁可止步不前, 绝不倒退.

数据采集 -> 数据清洗 -> 建数据库表 -> 业务逻辑 sql -> 业务前端网页看板 -> 额外编程支持...

虽然我都会了, 但就是不想弄. 有句话是这样说的,非常赞同, Where there is a will, there is a way. 就是, 一个人, 就我自己吧. 如果我想做一件事, 我一定会不断尝试去找一个方法; 如果我不想做, 我就会千方百计去找一个借口. 我现在就需要一个借口, 不, 很多借口..

吐槽完, 还是继续练习 sql, 虽然我工作中写的远比这些笔记复杂得多, 但仔细看,原理都差不多的. 练练而已, 就跟打字一样, 熟练到忘记怎么打为止

表关系

需求 01

查询 所有学生的课程 及分数情况

分析

case when 来进行将行变为列呗. sql 我都写套路化了, 先就是将涉及的表给 Join 起来, 最后再来字段, 要啥有啥.

select
from score as a
-- 匹配上课程名称, 学生信息
inner join course as b
on a.c_id = b.c_id
inner join student as c
on a.s_id = c.s_i

然后拼成了大表后, 再来处理字段, 包括字段筛选, 字段清洗(函数) , 条件过滤, 分组聚合, 排序等骚操作.

这一看就是要用 学号和课程号进行 group by 的, score 也来 group by 吧

mysql> select
-> s_id,
-> c_id,
-> score
-> from score
-> group by s_id, c_id, score;
+------+------+-------+
| s_id | c_id | score |
+------+------+-------+
| 0001 | 0001 | 80 |
| 0001 | 0002 | 90 |
| 0001 | 0003 | 99 |
| 0002 | 0002 | 60 |
| 0002 | 0003 | 80 |
| 0003 | 0001 | 80 |
| 0003 | 0002 | 80 |
| 0003 | 0003 | 80 |
+------+------+-------+
8 rows in set (0.00 sec)

还是不断重复, group by 最为关键的一点, select 中的字段, 必需要在 group by 中出现过, 或者是 聚合函数, 否则就引发歧义了呀. 然后呢, 其实我们想要看到的结果, 应该是那种展开的, 就要将 c_id 对应的那些课程给它从行变为列字段来展示. 即对 c_id 进行 case when 即可.

select
a.s_id as 学号,
a.c_id as 课程号,
c.s_name as 姓名, -- 将课程的行转为列,用 case when 的方式
max(case when b.c_name="语文" then a.score else null end) as 语文,
max(case when b.c_name="数学" then a.score else null end) as 数学,
max(case when b.c_name="英语" then a.score else null end) as 英语 from score as a
-- 匹配上课程名称, 学生信息
inner join course as b
on a.c_id = b.c_id
inner join student as c
on a.s_id = c.s_id group by c.s_id, c.s_name
+--------+-----------+-----------+--------+--------+--------+
| 学号 | 课程号 | 姓名 | 语文 | 数学 | 英语 |
+--------+-----------+-----------+--------+--------+--------+
| 0001 | 0001 | 王二 | 80 | 90 | 99 |
| 0002 | 0002 | 星落 | NULL | 60 | 80 |
| 0003 | 0001 | 胡小适 | 80 | 80 | 80 |
+--------+-----------+-----------+--------+--------+--------+
3 rows in set (0.00 sec)

我现在是可以很轻易写出来了, 因为我之前也跟着网上写了一遍了, 孰能生巧嘛, 果然如此, 又记住了, 正如艾宾浩斯说的那样, 记忆最好的方式, 就是重复.

不想练了, 我觉得这个 case when 就特别强大了. 还有今天还用到了一个 正则函数和 replace , 逐渐对 sql 有点感觉了, 就跟编程似乎差不多了. 我一直是感觉编程简单, sql 很难, 可是小伙伴们都不认同. 不管了, 都会就行了.多练习即可, 我想.

SQL 日常练习(十五)的更多相关文章

  1. SQL语句(十五)视图

    视图 实际上是一个查询语句, 如果将子查询保存为视图, 就可以将子查询的结果当作数据表使用 从而来简化查询语句 引言 例1 查询参加"数据库技术"课程的考试的学生学号.姓名.班级. ...

  2. SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关

    0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...

  3. SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关

    开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...

  4. OCM_第十五天课程:Section6 —》数据库性能调优 _SQL 访问建议 /SQL 性能分析器/配置基线模板/SQL 执行计划管理/实例限制

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  5. centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课

    centos  Linux系统日常管理2  tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...

  6. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  7. SQL注入之Sqli-labs系列第二十五关(过滤 OR & AND)和第二十五A关(过滤逻辑运算符注释符)

    开始挑战第二十五关(Trick with OR & AND) 第二十五关A(Trick with comments) 0x1先查看源码 (1)这里的or和and采用了i正则匹配,大小写都无法绕 ...

  8. SQL注入之Sqli-labs系列第十五关和第十六关(基于POST的时间盲注)

    开始挑战第十五关(Blind- Boolian Based- String)和 第十六关(Blind- Time Based- Double quotes- String) 访问地址,输入报错语句 ' ...

  9. centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课

    centos  lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress  安装phpmyadmin  定时备份mysql两种方法  第二十五节 ...

  10. 我的MYSQL学习心得(十五) 日志

    我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

随机推荐

  1. GridControl 给选中的行添加边框显示

    实现方式,通过自定义 RowControl 的样式实现. 参考:https://supportcenter.devexpress.com/ticket/list?searchString=RowCel ...

  2. 你还不会使用Pycham Remote development 打开远程主机工作目录吗?这篇文章帮你解决!

    前言 必备: 本地开发机与远程主机都要安装Pycharm专业版!!! 废话不多说直接开始!! 1.打开pycharm 2.依次点击File.Remote Development 3.依次点击SSH.N ...

  3. 克鲁斯焊机GL 270引弧困难维修

    克鲁斯焊机维修: 对于客户而言,其受益之处在于所有的机械手系统部件,从机械手控制.工件.定位器.传感器到电源和焊枪,都是由一家供应商开发和制造的.而诸如熔化极惰性气体/活性气体保护双丝焊接技术.等离子 ...

  4. 移动硬盘插入win10检测到却不显示盘符解决方法

    1.开始菜单中的设置-----设备. 2.选择"蓝牙和其他设备" 3.在其他设备栏中就能看到检测到的移动硬盘,点击删除设备后重新插入移动硬盘即可在此电脑上显示盘符.

  5. 深入解析:Jupyter Notebook 中魔法命令的使用技巧与应用

    Jupyter Notebook 中的魔法命令为用户提供了诸多便利功能.魔法命令主要分为行魔法(Line magic)和单元魔法(Cell magic),行魔法前缀为"%",单元魔 ...

  6. MySQL - [17] Oracle、SQLServer、MySQL数据类型对比

    题记部分 一.数据类型对比 对应关系 (1)整数类型 Oracle的NUMBER(*,0) 对应 SQL Server的INT 和 MySQL的INT Oracle的BIGINT 可能需要映射到SQL ...

  7. SpringBoot - [00] 注解大全

    原文链接:https://mp.weixin.qq.com/s/DgNhohtJyEq4vMGEzqrP8A @SpringBootApplication 这个注解用于标识一个SpringBoot应用 ...

  8. Week09_day05(Java API操作Hbase)

    package com.wyh.HbaseAPI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbas ...

  9. 在 Visual Studio 上体验腾讯云 AI 代码助手

    ​本文以以 Visual Studio 2022 为例. 第一步 安装[腾讯云 AI 代码助手] 打开以 Visual Studio 2022,依次点击工具栏中的-** 扩展 - ** 管理扩展 ,在 ...

  10. deepseek:封装一个axios

    封装一个包含上传和下载文件功能的 axios 实例,可以提高代码的复用性和可维护性.以下是一个完整的封装示例,支持文件上传.下载.以及常规的 GET/POST 请求. 封装代码 import axio ...