这几天都在整帆软报表, 还要弄 RPA ... 咱说呢, 这些破玩意, 是提升了业务人员的工作效率, 但, 极大降低了我的工作效率, 明明写代码就能解决, 非要各种 点点点... 文档也不全, 就很难受, 举步维艰, 这是我近段时间的感受, 发现百度, google 真的不是万能的. 有些问题, 就是前人没有的, 而且很多, 没有参考... 无所谓了, 自己的修炼还是得继续, sql 这块继续熟练使用, 争取练到我用Python的那种, 随心所欲的地步, 一点心愿吧.

表关系

需求 01

查询男生, 女生的人数

分析

group by 性别, count(学号) 即可, so easy

select
gender as 性别,
count(distinct s_id) as 人数
from student
group by gender

发现取别名的时候, 直接用中文还蛮好使的

+--------+--------+
| 性别 | 人数 |
+--------+--------+
| 女 | 1 |
| 男 | 3 |
+--------+--------+
2 rows in set (0.00 sec)

分组, 其实这里也可用 case when 来实现分组统计, 而不用 group by

select
sum(case when gender = '男' then 1 else 0 end) as 男同志人数,
count(case when gender = '女' then 1 else null end) as 女同志人数
from student

case when 的时候, sum 和 count 都可以实现功能. 计数而已嘛.

+-----------------+-----------------+
| 男同志人数 | 女同志人数 |
+-----------------+-----------------+
| 3 | 1 |
+-----------------+-----------------+
1 row in set (0.00 sec)

需求 02

查询名字中带有 "王" 字的学生信息

查询 姓王的学生信息

查询 名字为2个字的学生信息

查询 名字为3个字, 中间为 "小" 的学生信息

分析

模糊查询走一波

select * from student where s_name like "%王%";
select * from student where s_name like "王%";
select * from student where s_name like "%__";
select * from student where s_name like "_小_";

虽然简单, 但还是经常用的, 具体来查看一波详情吧还是.

mysql> select * from student where s_name like "%王%";
+------+--------+------------+--------+
| s_id | s_name | birth_date | gender |
+------+--------+------------+--------+
| 0001 | 王二 | 1989-01-01 | 男 |
+------+--------+------------+--------+
1 row in set (0.00 sec) mysql>
mysql> select * from student where s_name like "王%";
+------+--------+------------+--------+
| s_id | s_name | birth_date | gender |
+------+--------+------------+--------+
| 0001 | 王二 | 1989-01-01 | 男 |
+------+--------+------------+--------+
1 row in set (0.00 sec) mysql>
mysql> select * from student where s_name like "%__";
+------+-----------+------------+--------+
| s_id | s_name | birth_date | gender |
+------+-----------+------------+--------+
| 0001 | 王二 | 1989-01-01 | 男 |
| 0002 | 星落 | 1990-12-21 | 女 |
| 0003 | 胡小适 | 1991-12-21 | 男 |
| 0004 | 油哥 | 1996-10-01 | 男 |
+------+-----------+------------+--------+
4 rows in set (0.00 sec) mysql>
mysql> select * from student where s_name like "_小_";
+------+-----------+------------+--------+
| s_id | s_name | birth_date | gender |
+------+-----------+------------+--------+
| 0003 | 胡小适 | 1991-12-21 | 男 |
+------+-----------+------------+--------+
1 row in set (0.00 sec)

需求 03

查询 1996 年出生的学生信息

分析

时间处理呗, year, month, day, date, datetime .. 这些. 在数据分析中, 时间是个特别重要的字段. 环比, 同比, 本周, 上月, 最近3月, 半年.... 这些频率是非常高的.

select * from student where year(birth_date) = '1996'
+------+--------+------------+--------+
| s_id | s_name | birth_date | gender |
+------+--------+------------+--------+
| 0004 | 油哥 | 1996-10-01 | 男 |
+------+--------+------------+--------+
1 row in set (0.00 sec)

从字符串时间提取, month, year, day ...

mysql> select month('2020-4-16');
+--------------------+
| month('2020-4-16') |
+--------------------+
| 4 |
+--------------------+
1 row in set (0.00 sec) mysql>
mysql> select day('2020-4-16');
+------------------+
| day('2020-4-16') |
+------------------+
| 16 |
+------------------+
1 row in set (0.00 sec) mysql>
mysql> select year('2020-4-16');
+-------------------+
| year('2020-4-16') |
+-------------------+
| 2020 |
+-------------------+
1 row in set (0.00 sec)

整理几个常用的时间函数, 记个笔记

  • curedate() 返回当前日期
  • curtime() 返回当前时间
  • now() 返回当前的日期和时间
  • week(date) 返回 该日期 是一年中的第几周

....

小结

  • 日常练练 group by, 同时 case when 也能实现类似的 分组统计功能
  • 模糊查询 like, 通配符 % , 占位符 _ , 正则表达式 regexp
  • 时间函数 curdate, curtime, year, month , day ....

SQL 强化练习 (十三)的更多相关文章

  1. C#语言和SQL Server第十三 十四章笔记

    十三章  使用ADO.NET访问数据库 十四章使用ADO.NET查询和操作数据库 十三章:                                                       ...

  2. SQL强化(一)保险业务

    保险业务 : 表结构 : sql语句 : /*1. 根据投保人电话查询出投保人 姓名 身份证号 所有保单 编号 险种 缴费类型*/SELECTt2.cust_name,t2.idcard,t4.pro ...

  3. 强化学习(十三) 策略梯度(Policy Gradient)

    在前面讲到的DQN系列强化学习算法中,我们主要对价值函数进行了近似表示,基于价值来学习.这种Value Based强化学习方法在很多领域都得到比较好的应用,但是Value Based强化学习方法也有很 ...

  4. SQL强化练习(面试与学习必备)

    一.经典选课题A 1.1.请同时使用GUI手动与SQL指令的形式创建数据库.表并添加数据. 题目:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教 ...

  5. Apache安全和强化的十三个技巧

    Apache是一个很受欢迎的web服务器软件,其安全性对于网站的安全运营可谓生死攸关.下面介绍一些可帮助管理员在Linux上配置Apache确保其安全的方法和技巧. 本文假设你知道这些基本知识: 文档 ...

  6. SQL系列(十三)—— 关于表的DDL

    前面的文章一直都在讲述关于DML方面的SQL Statement.这篇文章来说说表方面的DDL: CREATE 创建表 ALTER 修改表 DROP 删除表 CREATE 1.语法 CREATE TA ...

  7. 写出高性能SQL语句的十三条法则

    1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个10万条记录的表中查1条记 ...

  8. SQL强化(三) 自定义函数

    ---恢复内容开始--- Oracle中我们可以通过自定义函数去做一些逻辑判断,这样可以减少查询语句,提高开发效率 create  -- 创建自定义函数 or replace -- 有同名函数就替换, ...

  9. SQL强化(二) 在Oracle 中写代码

    一  : 关于查询中的转换 -- 字符串转换 一 : decode 函数 转换 SELECT DECODE ( PROTYPE.PRO_TYPE_DATE, 'L', '长', 'm', '短', ' ...

  10. SQL语句(十三)多表查询

    多表查询 1. 笛卡尔乘积 简单格式 SELECT * 或字段列表 FROM 数据表列表 实例 --1. 笛卡尔乘积 (五条件的连接--很多条件无意义) Select * from Student, ...

随机推荐

  1. Python if分支

    分支语句: 1.单分支语句 1 if 条件表达式: 2 print("如果成立怎么养怎么样") 例:让用户输入年龄,如果大于18就可以去网吧偷耳机age = int(input(& ...

  2. PADS无模命令总结表

    无模命令总结表 1.C 补充格式,在内层负片设计时用来显示 Plane 层的焊盘及 Thermal.使用方法是,从键盘上输入 C 显示,再次输入 C 可去除显示. 2.D 打开/关闭当前层显示,使用方 ...

  3. 企业付款到零钱(微信小程序提现,用户提现到零钱)

    pom 增加 <dependency> <groupId>com.github.binarywang</groupId> <artifactId>wei ...

  4. Nginx - [01] 概述

    客户端访问增加.并发量增大. 001 || 什么是Nginx Nginx是一个高性能的HTTP和反向代理Web服务器,同时也提供了IMAP/POP3/SMTP服务. 占有内存少,并发能力强. 002 ...

  5. 基于 Flink+Iceberg 构建企业级实时数据湖

    Apache Flink 是大数据领域非常流行的流批统一的计算引擎,数据湖是顺应云时代发展潮流的新型技术架构.那么当 Apache Flink 遇见数据湖时,会碰撞出什么样的火花呢?本次分享主要包括以 ...

  6. 在鹅厂做java开发是什么体验

    离职已有好几个月,准备写一篇关于之前在腾讯做Java开发的经历,现在来谈谈在Java领域里,在腾讯做Java开发的体验.随便写写别较真. 首先,介绍一下腾讯里与Java相关的部门.主要有CDG(云与智 ...

  7. luogu-P10596题解

    简要题意 一个有 \(N\) 个元素的集合有 \(2N\) 个不同子集(包含空集),现在要在这 \(2N\) 个集合中取出若干集合(至少一个),使得它们的交集的元素个数为 \(K\),求取法的方案数, ...

  8. python实现监控站点目录,记录每天更新内容,并写入操作日志,以便查找病毒恶意修改

    问题描述:站点需要追溯代码的修改时间,以便尽早发现病毒恶意修改迹象,及时处理 运行环境:linux服务器,宝塔面板 示例代码:一.读取txt的文件路径,依次遍历所有目录下面的文件,并记录文件信息 pa ...

  9. AI回答:php中间件

    在PHP中,中间件(Middleware)是一种用于在处理请求和生成响应之间插入额外逻辑的机制.中间件通常用于执行诸如身份验证.日志记录.缓存.错误处理等任务.PHP本身并没有内置的中间件系统,但许多 ...

  10. Ceph-集群内分布式存储解决方案及基于Docker的部署

    打造集群高可用分布式存储Ceph很早以前在玩集群的时候就折腾过分布式存储服务来作为跨节点的数据共享和可靠存储,以前尝试过GlusterFS,但是由于读写速度实在是太低,就放弃了.见基于GlusterF ...