SQL 日常练习(十五)
这两周真的是被客户搞怕了, 我一个数据分析师, 干着比程序员还复杂的活, 拿着文员的工资, 看这我每天下班的打卡时间, 感觉我一点求生欲都没有,真的不知道图啥. 快速理解业务, 马上建数据库表, 写后台 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 日常练习(十五)的更多相关文章
- SQL语句(十五)视图
视图 实际上是一个查询语句, 如果将子查询保存为视图, 就可以将子查询的结果当作数据表使用 从而来简化查询语句 引言 例1 查询参加"数据库技术"课程的考试的学生学号.姓名.班级. ...
- SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关
0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...
- SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关
开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...
- OCM_第十五天课程:Section6 —》数据库性能调优 _SQL 访问建议 /SQL 性能分析器/配置基线模板/SQL 执行计划管理/实例限制
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- 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网络知识 第十五节课 ...
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
C# DateTime的11种构造函数 别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...
- SQL注入之Sqli-labs系列第二十五关(过滤 OR & AND)和第二十五A关(过滤逻辑运算符注释符)
开始挑战第二十五关(Trick with OR & AND) 第二十五关A(Trick with comments) 0x1先查看源码 (1)这里的or和and采用了i正则匹配,大小写都无法绕 ...
- SQL注入之Sqli-labs系列第十五关和第十六关(基于POST的时间盲注)
开始挑战第十五关(Blind- Boolian Based- String)和 第十六关(Blind- Time Based- Double quotes- String) 访问地址,输入报错语句 ' ...
- centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课
centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节 ...
- 我的MYSQL学习心得(十五) 日志
我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
随机推荐
- Mybatis 返回自增主键的id
Mybatis 返回自增主键的idkeyProperty=id:封装到对象中的id字段当中keyColumn=id:封装到数据库的id这一列order=AFTER:在新增语句之后执行 方法一 < ...
- 论今日,Vue VSCode Snippets 不进行代码提示的问题 或 vetur Request textDocument/documentSymbol failed.
这他喵的是因为 vetur 这个鬼东西升级了,然后和项目中某些包不匹配了, 降级就好了, 法克尤啊法克尤,我整了一天,大概是坏了吧 灵感来源:https://cxymm.net/article/a84 ...
- DW005 - ArgoDB基础
第1章 Argo基础 1.1 ArgoDB对象 说明 在ArgoDB中,可以使用常见的数据库对象,包括数据库(Database),表(Table),视图(View)和函数(Function) 可以使用 ...
- Windows 提权-PrintNightmare
本文通过 Google 翻译 PrintNightmare – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充 ...
- 腾讯云锐驰型轻量服务器搭建开源远程桌面软件RustDesk中继服务器小记
RustDesk是一个基于Rust编写的全平台开源远程桌面软件,其最大的特点为开箱即用,且数据完全自主掌控,甚至可以依托此项目定制化开发自己专属的远程桌面软件. 一.前言 由于我个人经常性出差,对远程 ...
- docker部署codegeex4实现本地IDE编程助手
实现了使用docker运行的ollama作为VSC或者其他IDE的编程助手,实现本地化的AI推理 环境 debian12 docker ollama 环境配置 ollama 参考 ollama在doc ...
- kubectl port-forward bind: address already in use unable
前言 本地的 8080 映射到 Pod 的 80,kubectl 会把这个端口的所有数据都转发给集群内部的 Pod kubectl port-forward wp-pod 8080:80 & ...
- 用状态模式开发一个基于WPF的截图功能
状态模式 状态模式是设计模式中的一种行为设计模式,对很多人来说,这个模式平时可能用不到.但是如果你做游戏开发的话,我相信你应该对这个模式有一个很深刻的理解.状态模式在游戏中开发中还是比较常见的.状态模 ...
- 裸金属架构之服务器安装VMWare ESXI虚拟化平台详细流程
目录1. 裸金属架构(Vcent)2. Vcent安装流程2.1 远程控制端(个人电脑)安装VMware-viclien2.2 服务器部署安装VMWare ESXI2.3 VMware-viclien ...
- CentOS——磁盘分区
Centos7-磁盘分区磁盘层次结构–磁盘分区方法情况一:磁盘分区–磁盘小于2T fdisk情况二:磁盘分区–磁盘大于2T centos6:parted centos7:fdisk一.磁盘小于2T情况 ...