首页 > 数据库 >sql 列转行 统计 男女平均分

sql 列转行 统计 男女平均分

时间:2023-02-10 18:23:51浏览次数:41  
标签:group Gender 转行 Score sql StuID Class select 平均分

面试的时候遇到这样一个问题,按照性别、科目 统计学生的平均分 。

如下图

首先很容易想到可以直接 group by 性别、科目获取平均分

sql如下

select Gender,Class,AVG(Score) from Student a left join Score b on a.StuID=b.StuID  group  by Gender,Class

可是最终的结果如下

 

 与上面的结果显然不同,所以需要将Class这一列转成行。

 

先把Class单列出来作为行,然后判断性别,填入分数

select Class as 科目,
case when Gender='男' then Score end as 男,
case when Gender='女' then Score end as 女  
from
(select Gender,Class,AVG(Score) Score from Student a left join Score b on a.StuID=b.StuID  group  by Gender,Class) b

这样的结果是

 

 因为每一行只有一个性别,所以另一个性别的数字是空的。这时根据科目取最大值即可

 

最终答案:

select Class as 科目,
max(case when Gender='男' then Score end) as 男,
max(case when Gender='女' then Score end) as 女  
from
(select Gender,Class,AVG(Score) Score from Student a left join Score b on a.StuID=b.StuID  group  by Gender,Class) b
group by Class

 

所以列转行的步骤:

1.单独查询将要作为行的列,将剩下的列作为判断依据,取出数据

2.然后group by行,取出每个判断语句的最大值  

 

标签:group,Gender,转行,Score,sql,StuID,Class,select,平均分
From: https://www.cnblogs.com/AduBlog/p/17109982.html

相关文章

  • MySQL--binlog2sql 安装及使用
    安装:依赖python3,请提前安装开源地址:https://github.com/danfengcao/binlog2sql$curlhttps://bootstrap.pypa.io/get-pip.py-oget-pip.py #下载安装脚本$sudop......
  • 记一次在Linux-Ubuntu上的mysql8安装
    踩坑网上的信息干货量太少了,都错的了解到centos系和ubuntu系的Linux还是有较大的区别的,命令都有不同,yum和apt,包管理器都不一样新开的Linux服务器跟裸奔一样,啥啥命令都没......
  • MySQL数据库系统部署使用
    推荐步骤: 在centos01上安装MySQL数据库服务,生成服务器配置文件,添加系统服务优化命令初始化MySQL,设置访问密码登录MySQL数据库 在centos01的MySQL服务器上创建数据库,数......
  • Mysql数据库备份恢复
    Mysql数据库备份恢复​推荐步骤:​使用mysqldump对数据库,数据库中表,一个数据库多个表,所有数据库进行备份,模拟数据丢失恢复备份的数据​配置mysql数据库开启二进制日志功能,配......
  • docker 下MySQL主从读写分离配置
    主从同步机制:同步基于耳机子机制,主服务器使用二进制来记录数据库的变动状况,从服务器通过读取和执行日志文件来保存主服务的数据一致首先要保障主从的版本一致或相近1......
  • sqlserver 查看表占用的大小
    ifobject_id('tempdb..#Tab')isnotnulldroptable#TabCREATETABLE#Tab(NAMEnvarchar(100),ROWSchar(20),reservedvarchar(18),Datavarchar(18),index_siz......
  • Calcite SQL 解析、语法扩展、元数据验证原理与实战(下)
    上一篇文章我们介绍了CalciteSQL解析的原理以及如何扩展SQL语法,本篇我们将进入SQL执行的下一个阶段:元数据验证。二、Calcite元数据验证SQL成功解析为抽象语法树后,......
  • MySQL 5.7.27 详细下载安装配置教程
    以下MySQL5.7.27详细下载安装配置教程【很早之前也记录过一篇MySQL8.0的安装配置过程,如果是8.0可参考下面的另一篇文章】MySQL的下载安装与Navicat配置(超详细)_乞力马扎......
  • Mysql 的三种 join方式
    mysql只有三种join方式参考:https://www.jianshu.com/p/76c90b03b7bdmysql只有三种join方式,但通过组合可以达到各种效果而已join就是innerjoinleftjoinrigh......
  • mysql 按照天,小时,分钟等分组排序
    按照季度统计SELECTCONCAT(DATE_FORMAT(create_time,'%Y'),'-',FLOOR((DATE_FORMAT(create_time,'%m')+2)/3),'季度')ASQUARTER,COUNT(1)AS总量FROM表WHEREcr......