聚合函数,分组查询,连接查询综合例子

实例如下:

update users set classes=‘1‘ where id in(‘u001‘,‘u002‘,‘u003‘,‘u004‘);

update users set classes=‘2‘ where id in(‘u005‘,‘u006‘,‘u007‘);

users表的内容如下:

+------+-----------+------------+------+-------+---------+

| id | firstname | secondname | age | count | classes |

+------+-----------+------------+------+-------+---------+

| u001 | 张 | 飞 | 18 | 60 | 1 |

| u002 | 赵 | 云 | 20 | 58 | 1 |

| u003 | 关 | 羽 | 22 | 80 | 1 |

| u004 | 刘 | 备 | 25 | 98 | 1 |

| u006 | 黄 | 盖 | 18 | NULL | 2 |

| u005 | 王 | 子云 | 12 | 20 | 2 |

| u007 | 诸葛 | 亮 | 24 | 100 | 2 |

+------+-----------+------------+------+-------+---------+

查询1班和2班的平均成绩:

select avg(count) from users group by classes;

//上面这种做法也是错误的。原因是从表中数据可以看出,count列的值有null值,这样的话聚合函数,求平均值的时候是不

会计算null值的。

select sum(count) from users group by classes;//各组count总和

select count(*) from users group by classes;//各组人员个数

select sum(count)/count(*) as avg from users group by classes;//各组count平均值

查询班级平均成绩不及格的班级详细人员信息

select sum(count)/count(*) as avg from users group by classes;

select classes,sum(count)/count(*) as avg from users group by classes;->temp

(select classes,sum(count)/count(*) as avg from users group by classes)as temp

//查出班级的平均分数小于60的组 和平均分。

select classes,sum(count)/count(*) as avg from users group by classes having avg<60;-temp

//最终输出结果的语句(将原来的表和临时表做连接查询)

select * from users,

(select classes,sum(count)/count(*) as avg from users group by classes having avg<60)as temp

where users.classes=temp.classes;

//having 子句的作用。

1.聚合函数,一般用于分组查询。

2.分组查询中的select的数据项,只能是聚合函数,和分组的数据项本身。

比如,上面的group by classes中,在查询中除了聚合函数以外,只可能出现classes数据项。

出现其它数据项,语法上,不会直接报错,但是没有任何意义。

3.对于having子句,只用于分组,是对分组查询结果进行条件限制的。

也就是说在这个例子中,having子句中只能出现对classes的限定和聚合函数的值的限定。

聚合函数,分组查询,连接查询综合例子

时间: 2024-11-03 22:15:39

聚合函数,分组查询,连接查询综合例子的相关文章

18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询

-- 数据的准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test; -- 显示使用的当前数据是哪个? select database(); -- 创建一个数据表 -- students表 create table students( id int unsigned primary key auto_increment not null, name varchar(20) default

查询单词,综合例子。

12.32 重写TextQuery和QueryResult类,用StrBlob代替vector<string>保存输入文件. TextQuery.h #ifndef TEXTQUERY_H #define TEXTQUERY_H #include<iostream> #include<string> #include<fstream> #include<vector> #include<memory> #include<map&

数据库编程1 Oracle 过滤 函数 分组 外连接 自连接

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <大纲> 数据库编程1 Oracle 过滤 函数 分组 外连接 自连接 本文实验基于的数据表: winsows安装好Oracle11g之后,开始实验 SQLplus 登陆 ORacle sqlplus 退出的方式 查看用户之下有什么表 查看表的所有记录,不区分大小写 设置SQLplus行宽,页宽,列宽: 清屏命令 select as 语法 1,as别名的使用 2,没有引号带有空格的别名,无法识别: 3,带有

数据库编程2 Oracle 过滤 函数 分组 外连接 自连接

[本文谢绝转载原文来自http://990487026.blog.51cto.com] 续:数据库编程1 Oracle 过滤 函数 分组 外连接 自连接 where like模糊查询,查询员工姓名是4个字母 SQL> select * from emp where ename like '____';      EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM    

mysql聚合函数 时间格式化 关联查询

1.时间格式化:SELECT DATE_FORMAT(a.START_TIME, '%Y-%m-%d' ) datime,DATE_FORMAT(a.START_TIME, '%Y-%m' ) motime FROM AGENT_STATUS a; 2.聚合函数:SELECT datime,motime,SUM(CASE WHEN STATUS = '102' THEN 1 ELSE 0 END) jtcount,SUM(CASE WHEN STATUS = '102' THEN DURATIO

MySql学习 - 查询/子查询/连接查询/联合查询

数据库查询 设定两张数据库表 第一个表格user包含: user_id username age sex 1 Alps1992 22 man 第二个表格toy包含 user_id toyname 1 OnePiece 普通查询: 查询关键字: AS, SUM, DESC, GROUP BY, ORDER BY, AVG, MIN, MAX, COUNT, LIMIT; 关键字查询例子 select * from user as u order by age limit 5; // as 用来做别

数据库数据的查询----连接查询

关系型数据库中允许表和表之间存在关系,这种关系可以把两个甚至多个表的数据联系在一起.利用这种关系,可以查询出某种符合条件的数据,这些数据将是一套符合实际业务逻辑的数据,而数据中这些表和表之间的关系将不存在.换句话说,获取真实世界的原始数据后,根据某种规则吧它们拆分成各种独立的数据,加入想从数据库中再次获取数据,那么需要依靠当初拆分的规则.而这种规则也可以看成表和表之间的联系,要再次实现这种联系,需要用到连接查询.连接分为内连接.外链接和全连接,还有一种叫做自连接,其中最常用的是内连接和外连接.

MySql高级查询--连接查询

前言 我们使用SQL查询不能只使用很简单.最基础的SELECT语句查询.如果想从多个表查询比较复杂的信息,就会使用高级查询实现. 常见的高级查询包括多表连接查询.内连接查询.外连接查询与组合查询等,今天我们先来学习最常用.面试也很容易被问到的连接查询. 我们今天以一个简单的学生信息表(学生ID.学生姓名.学生性别)与一个学生成绩表(学生ID.学生成绩.成绩等级)作演示: student_info表: student_score表: 一.内连接(INNER JOIN) 1.等值连接 概述:指使用等

MySQL复杂查询:连接查询+取某个类型的最大值

本文链接:https://blog.inchm.cn/default/38.html 需求 假设有一个考试,比如CET(包括CET-4和CET-6),学生可以多次报考刷分.现在某教育单位要从考试结果中把每个学生的CET-6最高分拿出来,然后进行一个排名. 表结构 现在有两个数据表:student 和 exam_result,分别表示学生的基本信息和每次考试结果(包括CET-4和CET-6的结果). 这里不考虑表结构的优化和完整,只给出必要字段. student: 字段名 含义 id ID(主键)

MySQL多表查询 三表查询 连接查询的套路

多表查询 * 当我们的一条记录 分散不同的表中时,就需要进行多表查询 例如 一对一 一对多 多对多 1.笛卡尔积查询 意思是将两个表中的所有数据 全部关联在一起   例如 a表 有2条 b表有3条   一共6条   会产生大量的错误数据 需要用添加来过滤select *from 表1,表2,....... where 过滤条件?连接查询内连接查询 inner jon   select *from 表1 join 表2 on 关系过滤条件   两边的数据必须完全匹配成功才显示     select