数据库高级查询【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.mzph.cn/news/771413.shtml

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

相关文章

专家解读|新规定引领数据跨境流动“新动向”

在数字经济时代&#xff0c;数据的有序流动和利用效率&#xff0c;对数据要素配置优化至关重要。特别是在跨境数字贸易活动中&#xff0c;高效且安全的跨境数据传输制度已成为推动数字贸易新秩序的基础。从世界范围看&#xff0c;美国、欧盟、东盟等都在推动各自国内法层面的数…

阿里云对象存储OSS入门

阅读目录 一、阿里云OSS的使用 1、OSS是什么&#xff1f;2、OSS的使用 二、阿里云OSS的使用三、图床的搭建四&#xff1a;图床绑定阿里云OSS 编写不易&#xff0c;如果我的文章对你有帮助的话&#xff0c;麻烦小伙伴还帮忙点个赞再走&#xff01; 如果有小伙伴觉得写的啰嗦&am…

maven使用${revision}

${revision}是一个变量&#xff0c;在pom.xml文件中动态指定依赖项的版本号&#xff0c;也可以在父 pom文件中定义&#xff0c;以便子项目可以继承这些属性。通常&#xff0c;${revision}变量会在 Maven 的属性<properties>部分定义&#xff0c;然后在依赖项中引用这个变…

Harmony OS WiFi编程——连接热点、创建热点

相关知识点 WiFi的工作模式 AP模式&#xff1a;热点模式&#xff0c;提供无线接入服务&#xff0c;允许其它无线设备接入&#xff0c;提供数据访问&#xff0c;一般的无线路由/网桥工作在该模式。STA模式&#xff1a;类似于无线终端&#xff0c;本身并不接受其他设备的接入&am…

济南市瞪铃企业申报流程

&#xff08;一&#xff09;组织申报。各街道、产业办组织对符合条件的企业进行申报&#xff0c;由所属街道、产业办签字盖章推荐&#xff0c;通过资料审核后完成申报。 &#xff08;二&#xff09;项目初审。街道产业办负责对申报资料的形式要件进行审查初审&#xff0c;并由…

Linux:部署达梦数据库DM8(1)

0.安装DM8数据库安装包 产品下载-达梦数据 (dameng.com)https://www.dameng.com/list_103.html进入官方网站下载centos7的安装包&#xff0c;本章使用centos7进行部署&#xff0c;提前关闭好防火墙和selinux 建议你的系统运行内存为&#xff1a;2G或以上 1.部署基础环境 先安…

众创空间、孵化器、加速器!2024年度陕西省科技企业孵化器认定类型条件、奖补

2024年度陕西省科技企业孵化器认定类型 科技企业孵化载体是众创空间、科技企业孵化器、科技企业加速器等多种形态孵化载体的统称&#xff08;以下简称孵化载体&#xff09;&#xff0c;是科技企业孵化链条中的重要组成部分&#xff0c;是引导各类人才创新创业、满足企业不同成…

spring核心组件

一、spring core组件&#xff1a;&#xff08;spring核心容器&#xff09; spring core提供spring框架的基本功能。包含了众多关键类&#xff0c;定义了资源的访问方式。 二、spring bean组件&#xff1a;实体对象 bean组件在spring的org.springframework.beans包下&#xff0c…

现在的市场对 C++ 的需求大吗?

先说结论&#xff1a;需求还是很大&#xff0c;但是没有什么初级程序员能干的岗位。 游戏引擎&#xff0c;存储&#xff0c;推荐引擎&#xff0c;infra&#xff0c;各种各样的性能敏感场景。 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;…

移位寄存器的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理2.1,逻辑左移2.2,逻辑右移3,结构特点3.1,基本单元3.2,串行输入/输出3.3,并行输入/输出3.4,移位操作3.5,循环或非循环4,工艺流程4.1,确定设计需求

在 nginx 中使用 JavaScript

前些日子尝试了在 nginx 中写 JavaScript 的效果。考虑到 JavaScript 作为编程语言不是强需求&#xff0c;在nginx生态上还是 lua 独大&#xff0c;并且还有 openresty 这样一直强力输血&#xff0c;大部分应用场景都能找到参考的解决方案。 插件生态来说&#xff0c;github 上…

USB Network Native Driver for ESXi 8.0U1 (v1.12) and 8.0U2 (v1.13)

因为 VMware 在被 Broadcom 收购后关闭了 Flings 网站&#xff0c;此社区版驱动文档迁移到了 USB Network Native Driver for ESXi Documentation - VMware Technology Network VMTN 之前发布的8.0U1 和 8.0U2 的下载链接暂时无法从 VMware 官网获得&#xff0c;不过有网友事先…

在线教程 | 一键启动 Sora 开源平替,俘获 45 万 AI 开发者

1888 年&#xff0c;爱迪生提交了一项名为「活动电影放映机」的专利&#xff0c;该设备首次实现连续播放静态照片&#xff0c;形成类似动态画面的效果&#xff0c;由此拉开了视频发展的序幕。 回顾历史&#xff0c;视频经历了从无到有、从黑白到彩色、从模拟信号到数字信号的迭…

Chrome 插件各模块之间的消息传递

Chrome 插件各模块之间的消息传递 一、消息传递 1. 消息传递分类 Chrome 插件的 Action、Background 和 content_script 三个模块之间的信息传输插件和插件之间的信息传输网页向插件进行信息传输与原生应用进行消息传递 2. 消息传递 API runtime API runtime.sendMessage(…

HTML作业2

作业1: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>table…

【实验室塑料器皿】耐受强酸强碱特氟龙量具PFA量筒量杯适用于半导体新材料

PFA量筒为上下等粗的直筒状&#xff0c;特氟龙量杯是上大下小的圆台形&#xff0c;底座均有宽台设计&#xff0c;保证稳定性&#xff0c;两者均可在实验室中作为定量量取液体的量具&#xff0c;上沿一侧有弧嘴设计&#xff0c;便于流畅地倾倒液体。 规格参考&#xff1a;5ml、…

P3919 【模板】可持久化线段树 1(可持久化数组)

题目描述 如题&#xff0c;你需要维护这样的一个长度为 N 的数组&#xff0c;支持如下几种操作 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外&#xff0c;每进行一次操作&#xff08;对于操作2&#xff0c;即为生成一个完全一样的版本&…

需求工程、需求规格说明的具体方式以及实践

需求规格说明&#xff08;SRS, Software Requirements Specification&#xff09;是需求工程过程中的关键产出之一。它详细描述了软件系统必须满足的功能和非功能需求&#xff0c;为项目团队提供了清晰的开发指南。一个好的需求规格说明书不仅能够指导开发和测试工作&#xff0…

curl在window及linux中的使用及区别

目录 内容介绍 测试一&#xff08;GET,application/json&#xff09; 归纳 测试二&#xff08;GET,x-www-form-urlencoded&#xff09; 归纳 测试三&#xff08;POST,FORM-DATA&#xff09; 归纳 测试四&#xff08;POST,x-www-form-urlencoded&#xff09; 归纳 总结…

yolov5交互式界面 V5.0-6.0版本通用界面-yolo-pyqt-gui(通用界面制作+代码)

往期热门博客项目回顾&#xff1a; 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 yolo GUI OYQT界面 YOLOv5…