MySQL -- 07_最流行的查询需求分析(一些分组排序查询、开窗函数 dense_rank、distinct 去重函数 等~)

news2025/1/10 23:47:33

目录

  • 最流行的查询需求分析07
    • 演示数据准备的SQL
    • 需求演示
      • 36、查询每一门课程成绩都在70分以上的姓名、课程名称和分数
        • group by + min() + in() 函数
      • 37、查询不及格的课程及学生
        • 普通表连接查询
      • 38、查询课程编号为01语文且课程成绩在80分以上的学生的学号和姓名
        • 普通表连接查询
      • 39、求每门课程的学生人数
        • 长型数据格式(多行)和宽型数据格式(多列)
      • 40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其所有成绩
        • 子查询+limit
      • 41、查询不同课程但成绩相同的学生的学生编号、课程编号、学生成绩
        • distinct 去重
      • 42、查询每门课程成绩最好的前两名
        • 使用开窗函数 dense_rank() over()
        • 子查询写法,不用开窗函数排序
      • 43、统计每门课程的学生选修人数(超过5人的课程才统计),要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
        • group by .... having ... order by
      • 44、检索至少选修两门课程的学生学号
        • group by .... having ...
      • 45、查询选修了全部课程的学生信息
        • group by .... having ...

最流行的查询需求分析07


演示数据准备的SQL


演示数据准备的SQL


需求演示


36、查询每一门课程成绩都在70分以上的姓名、课程名称和分数

group by + min() + in() 函数

用 group by 对学生id分组,用 min() 函数查出每门课程都大于70分的学生,然后用 in 匹配符合条件的学生

在这里插入图片描述

-- 36、查询每一门课程成绩都在70分以上的学生的姓名、课程名称和分数 

SELECT
	st.s_name,
	co.c_name,
	sc.s_score 
FROM
	score sc
	LEFT JOIN course co ON co.c_id = sc.c_id
	LEFT JOIN student st ON st.s_id = sc.s_id 
WHERE
st.s_id in (

	-- 先查询出3个成绩都70分以上的学生的id
	select s_id from score group by s_id having min(s_score) >= 70

)

37、查询不及格的课程及学生

普通表连接查询

在这里插入图片描述

-- 37、查询不及格的课程及学生

SELECT
	st.s_name,
	co.c_name,
	sc.s_score 
FROM
	score sc
	LEFT JOIN course co ON sc.c_id = co.c_id
	LEFT JOIN student st ON st.s_id = sc.s_id 
WHERE
	sc.s_score < 60

38、查询课程编号为01语文且课程成绩在80分以上的学生的学号和姓名

普通表连接查询

在这里插入图片描述


-- 38、查询课程编号为01语文且课程成绩在80分以上的学生的学号和姓名


SELECT
	st.s_id,
	st.s_name,
	co.c_name,
	sc.s_score 
FROM
	course co
	LEFT JOIN score sc ON sc.c_id = co.c_id
	LEFT JOIN student st ON st.s_id = sc.s_id 
WHERE
	co.c_id = '01' 
	AND sc.s_score >= 80

39、求每门课程的学生人数

长型数据格式(多行)和宽型数据格式(多列)

在这里插入图片描述


-- 39、求每门课程的学生人数

-- 宽型数据格式

SELECT 
	sum(case when sc.c_id = '01' then 1 else 0 end) '语文',
	sum(case when sc.c_id = '02' then 1 else 0 end) '数学',
	sum(case when sc.c_id = '03' then 1 else 0 end) '英语'
FROM
	course co
	LEFT JOIN score sc ON co.c_id = sc.c_id




-- 长型数据格式

SELECT
	co.c_name, count(sc.s_id) '人数'
FROM
	course co
	LEFT JOIN score sc ON sc.c_id = co.c_id 
GROUP BY
	co.c_id


40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其所有成绩

子查询+limit

limit 1 返回查询结果的第一行数据

在这里插入图片描述


-- 40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其所有成绩


SELECT
	st.*,co.c_name,sc.s_score 
FROM
	student st
	LEFT JOIN score sc ON sc.s_id = st.s_id 
	LEFT JOIN course co ON co.c_id = sc.c_id
WHERE
	st.s_id = (
	SELECT
		sc.s_id
	FROM
		teacher te
		LEFT JOIN course co ON co.t_id = te.t_id
		LEFT JOIN score sc ON sc.c_id = co.c_id 
	WHERE
		te.t_name = '张三' 
	ORDER BY
		sc.s_score DESC 
		
		-- limit 1 返回查询结果的第一行数据
		LIMIT 1 
	)

41、查询不同课程但成绩相同的学生的学生编号、课程编号、学生成绩

distinct 去重

在这里插入图片描述


-- 41、查询不同课程但成绩相同的学生的学生编号、课程编号、学生成绩

SELECT 
  distinct s1.*,
	co.c_name,
	st.s_name
FROM
	score s1
	LEFT JOIN score s2 ON s1.c_id != s2.c_id
	LEFT JOIN course co ON co.c_id = s1.c_id
  LEFT JOIN student st ON st.s_id = s1.s_id  	
WHERE
	s1.s_score = s2.s_score

42、查询每门课程成绩最好的前两名


使用开窗函数 dense_rank() over()

使用这个开窗函数,查出排名后获取前两名就可以了,我这里连表是为了把数据展示的更完整清晰。

在这里插入图片描述

-- 42、查询每门课程成绩最好的前两名 

SELECT
	st.s_id,
	st.s_name,
	t.c_name,
	t.s_score,
	t.drk 
FROM
	student st
RIGHT JOIN ( 
	SELECT 
		sc.*, 
		co.c_name,
		dense_rank () over ( PARTITION BY sc.c_id ORDER BY sc.s_score DESC ) drk 
	FROM score sc
	LEFT JOIN course co on co.c_id = sc.c_id
) t ON t.s_id = st.s_id 
WHERE
t.drk IN (1,2)

子查询写法,不用开窗函数排序

和上面结果不一样是因为我这里只取前两名,没有考虑成绩并列相同的。
上面的开窗函数写法就有考虑成绩相同的并列排名

在这里插入图片描述

-- 子查询写法
SELECT
	* 
FROM
	score s1 
WHERE

  -- 这个子查询相当于上面的开窗函数
	( SELECT 
			count( s2.s_score ) 
		FROM score s2 
		WHERE 
		  s1.c_id = s2.c_id 
			AND s1.s_score < s2.s_score 
	) + 1 <= 2 
	
ORDER BY
	s1.c_id,
	s1.s_score DESC


43、统计每门课程的学生选修人数(超过5人的课程才统计),要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

group by … having … order by

在这里插入图片描述

-- 43、统计每门课程的学生选修人数(超过5人的课程才统计),
-- 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

SELECT
	sc.c_id '课程编号',
	count( 1 ) cnt 
FROM
	score sc 
GROUP BY
	sc.c_id 
HAVING
	count( 1 )>= 5 
ORDER BY
	cnt DESC,  -- 按人数降序排列
	sc.c_id ASC -- 按课程号升序排列

44、检索至少选修两门课程的学生学号

group by … having …

在这里插入图片描述

-- 44、检索至少选修两门课程的学生学号

SELECT
	sc.s_id ,
	st.s_name,
	count( sc.s_id ) '选修课程数'
FROM
	score sc
	LEFT JOIN student st ON st.s_id = sc.s_id 
GROUP BY
	sc.s_id 
HAVING
	count( sc.s_id ) >= 2


45、查询选修了全部课程的学生信息

group by … having …

在这里插入图片描述

-- 45、查询选修了全部课程的学生信息

SELECT
	st.* 
FROM
	student st
	LEFT JOIN score sc ON st.s_id = sc.s_id 
GROUP BY
	sc.s_id 
HAVING
	count( sc.s_id ) = ( SELECT count( 1 ) FROM course )



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

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

相关文章

使用axios进行前后端数据传输

最近在和朋友合作写一个新的项目&#xff0c;前后端进行了分离&#xff0c;既然是分离的&#xff0c;肯定需要交互&#xff0c;今天这篇文章详细介绍一下数据交互的一种常见方式&#xff1a;使用axios,希望对大家有所帮助。 前端&#xff1a;以LoginPage.vue登录页面为例&…

扬帆出海扩规模,仍是比亚迪未来的发展关键?

又到了新能源车企公布阶段性成果的时期。 日前&#xff0c;乘联会预估2024年3月全国新能源乘用车厂商批发销量82万辆&#xff0c;同比增长33%&#xff0c;环比增长84%。其中&#xff0c;比亚迪继续领跑&#xff0c;3月销量超30万辆&#xff0c;环比增长147.8%&#xff0c;而这…

OpenHarmony实战:瑞芯微RK3566移植案例(上)

本文章是基于瑞芯微RK3566芯片的khdvk_3566b开发板&#xff0c;进行标准系统相关功能的移植&#xff0c;主要包括产品配置添加&#xff0c;内核启动、升级&#xff0c;音频ADM化&#xff0c;Camera&#xff0c;TP&#xff0c;LCD&#xff0c;WIFI&#xff0c;BT&#xff0c;vib…

中科院发布大模型想象增强法IAG,无需外部资源,想想就能变强

在人工智能领域&#xff0c;尤其是自然语言处理&#xff08;NLP&#xff09;的子领域——问答系统&#xff08;QA&#xff09;中&#xff0c;知识的获取和利用一直是推动技术进步的核心问题。近年来&#xff0c;大语言模型&#xff08;LLMs&#xff09;在各种任务中展现出了惊人…

【C语言】扫雷【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、扫雷游戏规则 尽快找到雷区中的所有不是地雷的格子,而不许踩到地雷。点开的数字是几&#xff0c;则说明该数字旁边的8个位置中有几个雷&#xff0c;如果挖开的是地雷&#xff0c;则会输掉游戏。 二、代码思路&…

Laravel 项目如何运行

如有一个 Laravel 项目&#xff0c;在配置好 PHP 版本和运行环境后&#xff0c;可以直接在项目下直接运行&#xff1a; php artisan serve 来启动你的项目。 通过浏览器查看 当项目运行后&#xff0c;默认的启动端口为 8000&#xff0c;可以通过浏览器来进行查看运行的 Larav…

C++性能测试工具

使用示例main.cpp // g-13 -O3 -stdc17 main.cpp profile.cpp #include <iostream> #include <chrono> #include <stdint.h> #include <mutex> // std::mutex#include "profile.h" #include "profile_rdtsc.h"std::mut…

GlusterFS分布式文件系统

一、GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba存储网关(可选&#xff0c;根据需要选择使用)组成。没有元数据服务器组件&#xff0c;这有助于提升整个系统的性能、可靠性和稳定性 二、GlusterFS特点 2.1 扩展性和高性能 Glu…

Tensorboard以及Transforms初步学习

一.前情提要 1.本文是代码结合知识点&#xff0c;注释即为知识点 2.主要详细讲解Tensorboard以及Transforms代码以及基础知识 3.若想深入学习&#xff0c;建议阅读 P3. Python学习中的两大法宝函数&#xff08;当然也可以用在PyTorch&#xff09;_哔哩哔哩_bilibili 二.简述…

Scala中如何使用Jsoup库处理HTML文档?

在当今互联网时代&#xff0c;数据是互联网应用程序的核心。对于开发者来说&#xff0c;获取并处理数据是日常工作中的重要一环。本文将介绍如何利用Scala中强大的Jsoup库进行网络请求和HTML解析&#xff0c;从而实现爬取京东网站的数据&#xff0c;让我们一起来探索吧&#xf…

云智慧发布对象关系型数据库CloudPanguDB,打破传统技术壁垒

近日&#xff0c;云智慧推出关系型数据库CloudPanguDB&#xff08;中文名称&#xff1a;盘古数据库&#xff09;&#xff0c;旨在通过高兼容性能和创新技术架构&#xff0c;降低企业项目整体运营成本。 无论是处理海量复杂数据&#xff0c;还是构建清晰有序的数据结构关系&…

c++ 谷歌glog日志库使用

效果如图&#xff1a; 本次使用qt环境演示&#xff0c;相关库文件和头文件下载链接&#xff1a;https://download.csdn.net/download/bangtanhui/89108477 将相关库文件和头文件&#xff0c;丢到工程目录下 然后需要在工程pro文件当中引入库文件和头文件&#xff1a; …

创建型模式--2.简单工厂模式【人造恶魔果实工厂1】

1. 工厂模式的特点 在海贼王中&#xff0c;作为原王下七武海之一的多弗朗明哥&#xff0c;可以说是新世界最大的流氓头子&#xff0c;拥有无上的权利和无尽的财富。他既是德雷斯罗萨国王又是地下世界的中介&#xff0c;控制着世界各地的诸多产业&#xff0c;人造恶魔果实工厂就…

Java Web这一路走来

大部分Java应用都是Web或网络应用&#xff0c;MVC框架在Java框架中有着举足轻重的地位&#xff0c;一开始的Web应用并不现在这样子的&#xff0c;一步一步走来&#xff0c;每一步都经历了无数的血和泪的教训&#xff0c;以史为镜可以知兴替。 1. 草莽时代 早期的Java服务端技…

使用ollydbg还原密码程序的密码

前言&#xff1a;我们上次用ida pro破解了程序密码这次我们换个工具来还原程序密码 第一步 和上次一样把找到的程序拖到ollydbg里面 第二步 右键点击查找所有引用字符串 第三步 找到报错代码双击进入 第五步 找到上面的jnz双击将其改成jz 第六步 将所修改的保存点击空白…

FPGA(Verilog)实现uart传输协议传输数据(含仿真)

目录 实现功能&#xff1a; 1.接收uart串行数据&#xff0c;输出并行数据(1byte)。 2.输入并行数据(1byte)&#xff0c;输出uart串行数据。 3.完成uart传输的1次环回。 uart协议的1帧数据传输 模块封装-port设置 Verilog代码实现 1.uart接收模块:接收串行数据,输出并行数…

基于Java+SpringBoot+Vue企业员工管理系统(源码+文档+部署+讲解)

一.系统概述 随着社会的发展&#xff0c;系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;但各种信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得信息&#xff0c;因此&#xff0c;设计一种安全高效的员工管理系统极为重要。 为设计…

swiftui macOS实现加载本地html文件

import SwiftUI import WebKitstruct ContentView: View {var body: some View {VStack {Text("测试")HTMLView(htmlFileName: "localfile") // 假设你的本地 HTML 文件名为 index.html.frame(minWidth: 100, minHeight: 100) // 设置 HTMLView 的最小尺寸…

【攻防世界】php_rce (ThinkPHP5)

进入题目环境&#xff0c;查看页面信息&#xff1a; 页面提示 ThinkPHP V5&#xff0c;猜测存在ThinkPHP5 版本框架的漏洞&#xff0c;于是查找 ThinkPHP5 的攻击POC。 构造 payload: http://61.147.171.105:50126/?sindex/think\app/invokefunction&functioncall_user_f…

续写Groq

这章写点Groq干货,理性的分析。 首先是Articical Analysis的关于Mixtral8*7B的吞吐比较 上图是有Mixtral 8*7BPaaS服务的AI服务商,Mistral自己居然排倒数第三 ,Groq是真的遥遥领先啊。 另外这个图是比较每100万tokens的cost,无论是推理速度还是cost,Groq都是遥遥领先…