数据库高级查询【mysql】

数据库高级查询【数据库】

  • 前言
  • 版权
  • 推荐
  • 数据库高级查询
    • 行转列
    • 统计数据 CASE WHEN 条件 THEN 结果1 ELSE 结果2 END
    • 数据库查询带排名
      • 建表
      • 查询带排名,排名连续
      • 查询带排名,排名不连续
      • 查询带排名,按行号
  • Mysql数据库函数
  • 常用函数
  • 最后

前言

2024-3-24 20:58:38

以下内容源自《【数据库】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://jsss-1.blog.csdn.net
禁止其他平台发布时删除以上此话

推荐

MySQL面试50题【mysql】

数据库高级查询

行转列

有一张学生成绩表sc(name姓名,class 课程,score 成绩),示例如下:
在这里插入图片描述

请使用 sql输出如下信息
在这里插入图片描述

# 3
/*
3.有一张学生成绩表sc(name姓名,class 课程,score 成绩),示例如下:请使用 sql输出如下信息*/
SELECT T.Name,MAX(T.语文) '语文',MAX(T.数学) '数学',MAX(T.英语) '英语'
FROM (SELECT Name,CASE WHEN class = '语文' THEN score ELSE 0 END AS '语文',CASE WHEN class = '数学' THEN score ELSE 0 END AS '数学',CASE WHEN class = '英语' THEN score ELSE 0 END AS '英语'FROM sc_2403) T
GROUP BY T.Name;/*
create table sc_2403
(name  varchar(16) null,class varchar(16) null,score int         null
);INSERT INTO sc_2403 (name, class, score) VALUES ('小花', '语文', 98);
INSERT INTO sc_2403 (name, class, score) VALUES ('小花', '英语', 95);
INSERT INTO sc_2403 (name, class, score) VALUES ('小花', '数学', 100);
INSERT INTO sc_2403 (name, class, score) VALUES ('小明', '语文', 93);
INSERT INTO sc_2403 (name, class, score) VALUES ('小明', '英语', 89);
INSERT INTO sc_2403 (name, class, score) VALUES ('小明', '数学', 96);*/

统计数据 CASE WHEN 条件 THEN 结果1 ELSE 结果2 END

与Mysql面试50题中18题一样
现有某公司人事相关表:
员工信息employee(编号code,姓名ame,性别sex,所属部门department)
OA流程审核信息process_info(流程编码id,流程名称name,审核时间(Date类型)approve_dale,审核人员工编码approve_code,申请人员工编码 apply_code,审核结果approve_result(Y通过,审核时长duration(毫秒))

请用SQL语统计审核时为“2024年3月”流程名称为“请假”的每个审核人员【员工姓名】、【审核总量】、【审核通过数量】、【驳回数量】【平均审核时间(小时)】、【最大审核时间(小时)】、【总审核时间(小时)】

employee表数据实例如下:

在这里插入图片描述

process_info表数据实例如下:
在这里插入图片描述

# 4
/*4.现有某公司人事相关表:
员工信息employee(编号code,姓名ame,性别sex,所属部门department)
OA流程审核信息process_info(流程编码id,流程名称name,审核时间(Date类型)approve_dale,审核人员工编码approve_code,申请人员工编码 apply_code,审核结果approve_result(Y通过,审核时长duration(毫秒))请用SQL语统计审核时为“2024年3月”流程名称为“请假”的每个审核人员【员工姓名】、【审核总量】、【审核通过数量】、【驳回数量】【平均审核时间(小时)】、【最大审核时间(小时)】、【总审核时间(小时)】employee表数据实例如下:process_info表数据实例如下:*/
SELECT e.name AS '员工姓名',count AS '审核总量',sumY AS '审核通过数量',sumN AS '驳回数量',avg AS '平均审核时间(小时)',max AS '最大审核时间(小时)',sum AS '总审核时间(小时)'
FROM employee eJOIN (SELECT approve_code,COUNT(approve_result)                                 AS count,SUM(CASE WHEN approve_result = 'Y' THEN 1 ELSE 0 END) AS sumY,SUM(CASE WHEN approve_result = 'N' THEN 1 ELSE 0 END) AS sumN,AVG(duration) / 3600000                               AS avg,MAX(duration) / 3600000                               AS max,SUM(duration) / 3600000                               AS sumFROM process_infoWHERE DATE_FORMAT(approve_date, '%Y-%m') = '2024-03'AND process_info.name = '请假'GROUP BY approve_code
) pON e.code = p.approve_code;/*create table employee
(code       varchar(16) null,name       varchar(16) null,sex        varchar(16) null,department varchar(16) null
);INSERT INTO ms_test.employee (code, name, sex, department) VALUES ('14140294', '小花', '女', '人力资源部');
INSERT INTO ms_test.employee (code, name, sex, department) VALUES ('02050240', '小明', '男', '总经办');
INSERT INTO ms_test.employee (code, name, sex, department) VALUES ('02050241', '小小', '女', '研发部');create table process_info
(id             int         null,approve_code   varchar(16) null,apply_code     varchar(16) null,name           varchar(16) null,approve_result varchar(16) null,approve_date   datetime    null,duration       int         null
);INSERT INTO ms_test.process_info (id, approve_code, apply_code, name, approve_result, approve_date, duration) VALUES (1, '14140294', '02050254', '出差', 'N', '2024-03-22 11:17:35', 528000);
INSERT INTO ms_test.process_info (id, approve_code, apply_code, name, approve_result, approve_date, duration) VALUES (2, '14140294', '02050255', '出差', 'N', '2024-03-22 11:17:37', 827000);
INSERT INTO ms_test.process_info (id, approve_code, apply_code, name, approve_result, approve_date, duration) VALUES (3, '14140294', '02050256', '出差', 'N', '2024-03-22 11:17:38', 942000);
INSERT INTO ms_test.process_info (id, approve_code, apply_code, name, approve_result, approve_date, duration) VALUES (4, '02050240', '02050257', '请假', 'Y', '2024-03-22 11:17:39', 3242000);
INSERT INTO ms_test.process_info (id, approve_code, apply_code, name, approve_result, approve_date, duration) VALUES (5, '02050241', '02050258', '请假', 'Y', '2024-03-22 11:17:41', 4116000);
INSERT INTO ms_test.process_info (id, approve_code, apply_code, name, approve_result, approve_date, duration) VALUES (6, '02050240', '02050259', '请假', 'Y', '2024-03-22 11:17:42', 738000);*/

结果
在这里插入图片描述

数据库查询带排名

数据库查询-分数排名

建表

在这里插入图片描述

create table scores
(id    int null,score int null
);INSERT INTO bs_sql.scores (id, score) VALUES (1, 98);
INSERT INTO bs_sql.scores (id, score) VALUES (2, 100);
INSERT INTO bs_sql.scores (id, score) VALUES (3, 97);
INSERT INTO bs_sql.scores (id, score) VALUES (4, 98);
INSERT INTO bs_sql.scores (id, score) VALUES (5, 99);
INSERT INTO bs_sql.scores (id, score) VALUES (6, 99);

查询带排名,排名连续

按成绩降序,学号升序
成绩相同排名相同,排名连续

在这里插入图片描述

SELECT id,score,DENSE_RANK() OVER (ORDER BY score DESC ) AS 'rk'
FROM scores
ORDER BY  score DESC ,id ASC ;

查询带排名,排名不连续

按成绩降序,学号升序
成绩相同排名相同,排名不连续
在这里插入图片描述


SELECT id,score,RANK() OVER (ORDER BY score DESC ) AS 'rk'
FROM scores
ORDER BY  score DESC ,id ASC ;

查询带排名,按行号

与Mysql面试50题中19题一样

按成绩降序,学号升序,按行号
在这里插入图片描述

SELECT id,score,ROW_NUMBER() OVER (ORDER BY score DESC ) AS 'rk'
FROM scores
ORDER BY  score DESC ,id ASC ;

Mysql数据库函数

Mysql数据库函数【Mysql】

常用函数

函数解释
ROUND(x,y)返回一个对x的值进行四舍五入后最接近x的值,并保留到小数点后面Y位
CONCAT(s1,s2…n)连接s1,s2…,sn为一个字符串
YEAR(date)MONTH(date) / DAY(date)返回具体的日期值
HOUR(time) MINUTE(time) /SECOND(time)返回具体的时间值、
DATEDIFF(date1,date2)返回date1 - date2的日期间隔天数
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2…[ELSE resultn] END相当于Java的if…else if…else…

现有课程信息表course_info_tb(cid 课程ID,tag 视频类别 release_date 发布日期,duration 视频时长)
示例数据如下
在这里插入图片描述

用户观看记录表play_record_tb(uid 用户ID,cid 课程ID,start time 开始观看时间,end_time 结束观看时间,score 用户评分)
在这里插入图片描述

请统计每类视频的平均播放进度,对于每条播放记录,播放进度=播放时长÷视频时长。特殊地,如果播放时长大于视频时长,则播放进度记为100%。结果以百分数的形式保留一位小数。结果按播放进度降序 排序示例输出如下

tag  	avg_play_progress
c++ 	61.1%
python 	34.4%
/*现有课程信息表course_info_tb(cid 课程ID,tag 视频类别 release_date 发布日期,duration 视频时长)
示例数据如下用户观看记录表play_record_tb(uid 用户ID,cid 课程ID,start time 开始观看时间,end_time 结束观看时间,score 用户评分)请统计每类视频的平均播放进度,对于每条播放记录,播放进度=播放时长÷视频时长。特殊地,如果播放时长大于视频时长,则播放进度记为100%。结果以百分数的形式保留一位小数。结果按播放进度降序 排序示例输出如下tag  	avg_play_progress
c++ 	61.1%
python 	34.4%*/SELECTc.tag,CONCAT(ROUND(AVG(CASEWHEN end_time < start_time THEN 0WHEN end_time > DATE_ADD(start_time, INTERVAL c.duration MINUTE) THEN 100ELSE (UNIX_TIMESTAMP(end_time) - UNIX_TIMESTAMP(start_time)) / (c.duration * 60) * 100END), 1),'%') AS avg_play_progress
FROM play_record_tb pJOIN course_info_tb c ON p.cid = c.cid
GROUP BY c.tag
ORDER BY avg_play_progress DESC;/*create table course_info_tb
(id           int         null,cid          int         null,release_date date        null,duration     int         null,tag          varchar(16) null
);INSERT INTO ms_blibli.course_info_tb (id, cid, release_date, duration, tag) VALUES (1, 9001, '2022-01-01', 60, 'c++');
INSERT INTO ms_blibli.course_info_tb (id, cid, release_date, duration, tag) VALUES (2, 9002, '2022-01-01', 90, 'python');
INSERT INTO ms_blibli.course_info_tb (id, cid, release_date, duration, tag) VALUES (3, 9003, '2022-01-01', 45, 'sql');
INSERT INTO ms_blibli.course_info_tb (id, cid, release_date, duration, tag) VALUES (4, 9004, '2022-01-02', 45, 'java');create table play_record_tb
(id         int      null,uid        int      null,cid        int      null,start_time datetime null,end_time   datetime null,score      int      null
);INSERT INTO ms_blibli.play_record_tb (id, uid, cid, start_time, end_time, score) VALUES (1, 1001, 9001, '2022-01-01 08:30:00', '2022-01-01 09:00:00', 5);
INSERT INTO ms_blibli.play_record_tb (id, uid, cid, start_time, end_time, score) VALUES (2, 1001, 9002, '2022-01-02 08:30:00', '2022-01-02 09:01:00', 4);
INSERT INTO ms_blibli.play_record_tb (id, uid, cid, start_time, end_time, score) VALUES (3, 1001, 9001, '2022-01-03 09:30:00', '2022-01-03 10:20:00', 5);
INSERT INTO ms_blibli.play_record_tb (id, uid, cid, start_time, end_time, score) VALUES (4, 1002, 9001, '2022-01-01 08:30:00', '2022-01-01 09:00:00', 3);*/

最后

迎着日光月光星光,直面风霜雨霜雪霜。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/568469.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker进阶:Docker Swarm(集群搭建) —实现容器编排的利器

Docker进阶&#xff1a;Docker Swarm&#xff08;集群搭建&#xff09; —实现容器编排的利器 1、什么是Docker Swarm&#xff1f;2、Docker Swarm 与 Docker Compose的区别3、创建一个Swarm集群&#xff08;1-Manager&#xff0c;2-Worker&#xff09;1、资源准备2、初始化Swa…

QT环境搭建

学习QT 一、QT环境搭建二、QT的SDK下载三、认识QT SDK 中自带的一些程序 一、QT环境搭建 QT开发环境&#xff0c;需要安装三个部分。 c编译器&#xff08;gcc、cl.exe……不是visual studio&#xff09;QT SDK&#xff08;QT SDK里面已经内置了C编译器&#xff1b;SDK就是软件…

迅雷网盘拉新项目,一手接单渠道(附新人操作教程)

一、 星子助推-迅雷拉新项目介绍 &#xff08;一&#xff09;项目优势 1、 网盘功能强大&#xff1a;作为国内比较早的网盘产品&#xff0c;支持市面上包括安装包、压缩包、图片、视频、文档基本上所有格式的文件都可以放在迅雷云盘上&#xff0c;用户下载和转存方便。 2、 …

使用WebClient发起网络请求

目录 1、导入对应的pom 2、编写WebClientUtil请求工具类 3、使用WebClientUtil发起请求 使用WebClient的优点&#xff1a;支持lambdas 的函数&#xff1b;支持更高的并发性和更少的硬件资源&#xff1b;支持同步和异步&#xff1b;支持流式传输。具体的使用方式如下&#xff1a…

单片机入门到精通:一站式在线学习平台!

介绍&#xff1a;单片机&#xff0c;也称为微控制器&#xff08;MCU&#xff09;&#xff0c;是一种集成了中央处理器&#xff08;CPU&#xff09;、随机存储器&#xff08;RAM&#xff09;、只读存储器&#xff08;ROM&#xff09;以及输入/输出接口于单一芯片上的微型计算机。…

【数据库】SQL Server 2008 R2 安装过程

启动安装程序&#xff0c;点击setup&#xff0c;进入【SQLServer安装中心】 点击界面左侧的【安装】&#xff0c;然后点击右侧的【全新SQLServer独立安装或向现有安装添加功能】&#xff0c;进入【SQLServer2008R2安装程序】界面&#xff0c;如下图所示&#xff1a; 进入【安装…

SQL复习专题

请结合B站-技术蛋老师 视频学习 核心语法 一、增&#xff1a;数据库/表格 create create database 数据库名&#xff1b;#创建表&#xff08;列名类型&#xff09; mysql> create table eggs_record(-> id int,-> egg_name varchar(10),-> sold date-> ); 这…

hcip复习总结2(广域网与OSPF)

数据链路层面&#xff1a; 针对不同的物理链路定义不同的封装 局域网封装&#xff1a; Ethernet 2 &#xff08; TCP/IP &#xff09; &#xff0c; IEEE802.3 &#xff08; OSI &#xff09; 广域网封装&#xff1a; PPP HDLC FR ATM HDLC &#xff1a; 高级数据链路控制协…

WPF —— Expander折叠栏 、菜单标签 menu

Expander 1 &#xff1a;Expander折叠栏 简介 Expander控件有一个箭头按钮。单击箭头时&#xff0c;Expander中的子元素将显示或隐藏。箭头“展开”控件&#xff0c;使其子控件可见。 2 &#xff1a;Expander常用的属性 IsEnabled 默认是打开或者折叠起来&#xff0c;true就…

漏洞挖掘 | EDU小通用漏洞分享

1.信息搜集 首先就是信息搜集&#xff0c;挖edu没账号怎么办呢&#xff1f;sg妹子不行&#xff0c;咱就找能自己注册的站。 Hunter&#xff1a;web.title”XX大学”&&web.body”注册” Fofa&#xff1a;host”.edu.cn” && body”注册” && country”…

Java基础内容汇总(上)

目录 一、基础二、数组三、类和对象四、面向对象特征之一&#xff1a;封装与隐藏4.1、构造器(构造方法)4.2、this 的使用4.3、关键字—import 五、继承5.1、方法的重写(override/overwrite)5.2、关键字&#xff1a;super 六、多态6.1、操作符与equals方法6.2、toString的使用6.…