MYSQL 行转列 以及基本的聚合函数count,与group by 以及distinct组合使用

摘要:
在统计查询中,经常会用到count函数,这里是基础的MYSQL行转列以及基本的聚合函数count,与groupby以及distinct组合使用--创建表CREATETABLE`tb_student`(`id`int(11)NOTNULL,`stu_name`varchar(255)CHARACTERSETutf8mb4DEFAULTNULLCOMMENT'学生姓名',`tea_name`varch

在统计查询中,经常会用到count函数,这里是基础的 MYSQL 行转列 以及基本的聚合函数count,与group by 以及distinct组合使用

--创建表
CREATE TABLE`tb_student` (
  `id` int(11) NOT NULL,
  `stu_name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '学生姓名',
  `tea_name` varchar(255) DEFAULT NULL COMMENT '教师姓名',
  `stu_class` varchar(255) DEFAULT NULL COMMENT '所在班级名称',
  `stu_sex` varchar(255) DEFAULT NULL COMMENT '学生性别',
  `stu_sex_int` tinyint(4) DEFAULT NULL,
  PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--插入数据 /*INSERT INTO `tb_student`  VALUES ('0', '小明', '老张', '一班', '男',0);
INSERT INTO `tb_student` VALUES ('1', '小红', '老张', '一班', '女',0);
INSERT INTO `tb_student`  VALUES ('2', '小刚', '老王', '一班', '男',0);
INSERT INTO `tb_student`  VALUES ('3', '小兰', '老王', '一班', '女',0);
INSERT INTO `tb_student`  VALUES ('4', '小军', '老张', '二班', '男',0);
INSERT INTO `tb_student`  VALUES ('5', '小芳', '老张', '二班', '女',0);
INSERT INTO `tb_student`  VALUES ('6', '小强', '老王', '二班', '男',0);
INSERT INTO `tb_student`  VALUES ('7', '小娜', '老王', '二班', '女',0);
INSERT INTO `tb_student` VALUES ('8', null, null, null, null,null);*/
/***************************/EXPLAIN SELECT count(2) fromtb_student;
SELECT count(*) from tb_student;                //8
SELECT count(1) from tb_student;                //8
SELECT count(stu_name) from tb_student; //7
SELECT count(NULL) from tb_student;            //0
/**总结
当count的表达式为 NULL 时 不会计数 ,所以count(fieldName) 当fieldName 为null时 不会计数 
所以 count(n)用于查询表的记录数
*/
SELECT COUNT(DISTINCT tea_name) fromtb_student;

SELECT DISTINCT tea_name fromtb_student;

SELECT *,count(tea_name) from tb_student GROUP BYtea_name;
/**查询每个老师在一班教了多少学生,在二班教了多少学生*/
 select *,count(id) FROM tb_student GROUP BYtea_name,stu_class;
/*这种方法不太直观我们可以把结果行转列更加清晰表达每个教师交每个班的人数*/
SELECTtea_name,
    COUNT(case when stu_class='一班' then 1 ELSE NULL END ) AS '一班人数',
    COUNT(case when stu_class='二班' then 5 ELSE NULL END ) AS '二班人数'
FROM tb_student GROUP BYtea_name;
/**每个老师各自教了多少学生*/
SELECTtea_name,
    COUNT(*) AS '学生人数'
FROM tb_student GROUP BY tea_name;

免责声明:文章转载自《MYSQL 行转列 以及基本的聚合函数count,与group by 以及distinct组合使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用 pdf.js 在网页中加载 pdf 文件PyQt5操作SQLite数据库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL学习笔记:字符串前后补全0

  遇到一个需求:不足6位的需要自动补全6位,使用函数LPAD()和RPAD()补全。   LPAD(str, len, padstr)   用字符串padstr对str进行左边填充补全直至它的长度达到len个字符,返回str。 一、前补0(左补0) SELECT LPAD(id,6,0) AS TIME FROM test;   结果:    二、后补0...

数据库基础 MySQL

数据库 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享。 数据库管理系统软件 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库...

Mysql主从同步在线实施步骤【适合大数据库从库配置】

Mysql主从同步在线实施步骤【适合大数据库从库配置】     MySQL的主从搭建大家有很多种方式,传统的mysqldump方式是很多人的选择之一,但比较适合在新实例中实施,对于较大的数据库则存在停机等不可接受的问题,所以该方式并非理想的选择。使用innobackupex 则可以快速轻松的构建或修复mysql主从架构,该方式的好处是对主库无需备份期间导致...

Mysql储存过程1: 设置结束符与储存过程创建

#显示储存过程 show procedure status; #设置结束符 delimiter $; #创建储存过程 create procedure procedure_name() begin --sql语句 end$ create procedure myshow() begin select user(),databas...

mysql批量插入,批量更新

进行批量操作的时候,一定要事先判断数组非空 <insert id="batchInsert"parameterType="java.util.List"> insert into DATA (ID, TEXT, STAUTS) <foreach close=")"collection="list"item="item"index="i...

docker 安装mysql

1.下载镜像文件mysql 默认下载最新版本源 docker pull mysql 2.docker search mysql 可以查看mysql 源 3.查看docker image : docker images |grep mysql 4.检查容器存在情况: docker ps [root@hostuser dockerdir]# docker p...