MySQL汇总分析(groupby)

MySQL使用groupby关键字对数据进行分组,通常与聚合函数一起使用。
以下是13个问题的MySQL查询示例。

2.查询每个学生的平均成绩,并按照成绩降序、学号升序排列:使用AVG函数结合ORDERBY。

3.询问每门课程的平均分。
AVG函数并结合了GROUPBY和ORDERBY将结果按降序排序。

4.查询90年代出生的男女学生人数,并按降序排序:使用DATE函数和COUNT函数,结合GROUPBY。

扩展,如果想横向显示怎么办?通常,SUM或COUNT函数与CASE...THEN或IF函数结合使用。

5.查询不同性别和年份的出生人数:使用DATE函数,结合GROUPBY和COUNT函数。

6.查询同名学生列表,统计同名学生的姓名和人数:使用GROUPBY和COUNT函数。

7查询每门课程的平均分,平均分大于等于70分:使用AVG函数,结合GROUPBY和HAVING。

8.查询至少选修过2门课程的学生人数:使用GROUPBY和COUNT函数。

9.查询至少通过两门课程的学生人数:必须先计算每门课程的及格分数,然后使用GROUPBY和COUNT函数。

10查询学习编号为“01”的科目并且同时学习编号为“02”的科目的学生人数:使用GROUPBY和COUNT函数,结合逻辑评价。

11.查询学习过编号为“01”的科目但未学习过编号为“02”的科目的学生号:排除学习过编号为02的科目的学生,使用GROUPBY和COUNT函数。

12查询只学习了编号为“01”的科目并且同时学习了编号为“02”的科目的学生人数:使用排除条件,结合GROUPBY和COUNT函数。

13.查询各科目的最高分、最低分、平均分:以如下形式显示:课程ID、最高分、最低分、平均分、通过率。
使用MAX、MIN和AVG函数,结合GROUPBY和COUNT函数,计算通过率。

列出各门课程成绩最好的两位学生--MySQL

如果您认为有两个第二名得分相同,可以使用以下语句:SELECTa.name,a.subject,a.scoreFROMstuscoreASaWHERE(SELECTCOUNT(DISTINCTscore)FROMstuscoreASbWHEREb.subject=a.subjectANDb.score>=a.point)<=2ORDERBYa.subjectASC,a。
ScoreDESC如果有两个第二位置的分数相同,则删除第二位置:SELECTa.name,a.subject,a.scoreFROMstuscoreASaWHERE(SELECTCOUNT(*)FROMstuscoreASbWHEREb.subject=a.subjectANDb.score>=a.score)

MySQL8.0窗口函数之排名函数(rank、dense_rank)的使用

窗口函数介绍及详细语法解释窗口函数由两部分组成:函数名和上面的语句。
函数名称指示执行的操作,over语句定义窗口的范围和行为。
窗口函数参数不是必需的,仅在特定情况下使用。
over语句包含三个可选参数:partition用于对数据进行分组,orderby指定排序字段,rows/rangeBetween定义开始和结束位置。
基于行计数的行和基于值大小的范围。
滑动窗口函数使用第三个参数。
静态窗口函数rank()和dense_rank()的问题:根据score从高到低排名代码示例:`select*,rank()over(orderbyscoredesc)rankfromsc;`说明:rank()用于排名,无需要参数,上面的语句指定了类的降序排序。
整个数据被认为是一个窗口,并且排序结果是绑定的。
问题:求每门课程的成绩排名。
代码示例:`select*,rank()over(partitionbyc_idorderbyscoredesc)rankfromsc;`说明:按c_id分组,每门课程被视为一个窗口,排序并返回评分。
问题:查询每个学生的总分和排名代码示例:`selects_id,sum(score)totalScore,rank()over(orderbysum(score)desc)rankfromscgroupbys_id;`说明:先按s_id分组并汇总分数,然后执行窗函数,按总分降序排列。
总结:窗口函数简化了复杂的查询,灵活处理排序和分组问题。
每种功能适合不同的情况,具体用途需要结合实际需要。