数据库高级查询【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,一经查实,立即删除!

相关文章

阿里云对象存储OSS入门

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

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

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

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

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

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

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

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…

pycharm连接服务器运行时找不到文件或目录

选择你要修改的python interpreter 进入下图界面&#xff0c;默认选择的是Deployment configuration,需要将其改成SSH。 再将上图python interpreter path和pycharm helpers path 配置成服务器上相应地址即可。 over

校园跑腿小程序源码系统多校园版 跑腿达人入驻接单 带完整的安装代码包以及系统部署教程

在数字化时代的浪潮中&#xff0c;校园生活的便捷性和高效性成为了广大师生的共同追求。为了满足这一需求&#xff0c;罗峰给大家分享一款适用于多校园的跑腿小程序源码系统——校园跑腿小程序源码系统多校园版。该系统不仅提供了完整的安装代码包&#xff0c;还附带了详尽的系…

用指针处理链表(一)

1链表概述 链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。我们知道,用数组存放数据时,必须事先定义固定的长度(即元素个数)。比如,有的班级有100人&#xff0c;而有的班只有30人&#xff0c;如果要用同一个数组先后存放不同班级的学生数据,则必须定义长度…

男青年穿什么裤子好看?适合男生穿的百搭神裤

这几年衣服的款式可谓是越来越多了&#xff0c;很多男生在选裤子的时候都发现虽然款式越来越多&#xff0c;但现在市面上的裤子质量参差不齐&#xff0c;导致难以选择。而且还有很多商家为了利润采用低廉的材料&#xff0c;从而上身舒适性极差。 那么今天就给大家详细介绍几点…

3D软件坐标系速查

本文介绍不同3D软件的世界坐标系之间的差异及其工作原理。 基本上&#xff0c;游戏引擎和3D软件包最重要的问题是根据软件的坐标轴系统创建资产&#xff0c;正确缩放它们并根据要完成的工作设置枢轴系统。 坐标系正确性的定义可能会根据模型导入的游戏引擎或 3D 软件而变化。…

开放式耳机性价比高的品牌有哪些呢?五大高性价比选购清单

不入耳开放式蓝牙耳机近两年开始火起来了&#xff0c;因为它佩戴的舒适性和安全性两方面受到了很多人的关注。开放式的设计&#xff0c;就算不放进耳朵里也能听歌&#xff0c;同时加上它独特的空气传导的传声途径&#xff0c;整体的音质还是很不错的。不压耳&#xff0c;不涨耳…

2016年认证杯SPSSPRO杯数学建模D题(第二阶段)NBA是否有必要设立四分线全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 D题 NBA是否有必要设立四分线 原题再现&#xff1a; NBA 联盟从 1946 年成立到今天&#xff0c;一路上经历过无数次规则上的变迁。有顺应民意、皆大欢喜的&#xff0c;比如 1973 年在技术统计中增加了抢断和盖帽数据&#xff1b;有应运而生、力…

通过MobaXterm工具远程连接可视化服务器桌面并操控

目录 一、MobaXterm工具二、MobaXterm工具可视化服务器目录三、MobaXterm工具可视化服务器桌面 一、MobaXterm工具 MobaXterm是一款功能强大的远程连接工具&#xff0c;可以用于连接到各种类型的服务器&#xff0c;包括Linux、Windows和MacOS。它支持多种协议&#xff0c;包括…

【C语言】linux内核pci_enable_device函数和_PCI_NOP宏

pci_enable_device 一、注释 static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags) {struct pci_dev *bridge;int err;int i, bars 0;/** 此时电源状态可能是未知的&#xff0c;可能是由于新启动或者设备移除调用。* 因此获取当前的电源状态&…