sql分组

SQL where and having

元气小坏坏 提交于 2019-11-30 12:20:48
HAVING 支持所有WHERE操作符,他们语法是相同的,只是关键字差别,HAVING支持所有WHERE的条件,唯一的差别是WHERE过滤行,而HAVING过滤分组。另一种理解方法,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。这是一个重要区别,WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。 SELECT vend_id, COUNT(*) AS num_prods FROM products WHERE prod_price>=10 GROUP BY vend_id HAVING COUNT(*) >= 2 WHERE子句过滤所有prod_price至少为10的行。然后按vend_id分组数据,HAVING子句过滤计数为2或2以上的分组 来源: https://my.oschina.net/tianhuahua/blog/3110766

数据库详解

谁说胖子不能爱 提交于 2019-11-30 04:30:21
什么是数据库 # 用来存储数据的仓库 # 数据库可以在硬盘及内存中存储数据 # 数据库与文件存储数据区别 # 数据库本质也是通过文件来存储数据, 数据库的概念就是系统的管理存储数据的文件 数据库介绍 数据库服务器端: 存放数据库的主机集群 数据库客户端: 可以连接数据库的任意客户端 数据库管理员: DBA # socket套接字的C/S架构应用 数据库基本概念 # 重要性: *** # 库: 多表构建一个数据库, 本质就是文件夹 # 表: 多条数据构建一张表, 本质就是文件 # 记录: 存放一条条数据, 本质就是文件中一条条数据记录 # (字段)id, name, age, gender...一个老师的数据 => 一条数据记录 数据库分类 # 重要性: *** # 关系型数据库 # 1.有表的概念 # 2.以表中一条条记录存储数据 # mysql oracle sqlServer access db2 # 非关系型数据库 # 1.没有表的概念 # 2.通过key-value键值对方式存储数据 # mongodb redis memcache 数据库安装 # 安装server端与client端 # 如何启动server? 如果通过client连接server 数据库启动与连接 # 前提:配置环境变量 # 了解 # 1.前往数据库安装路径,bin文件夹下,cmd执行 mysqld

MySQL数据分组Group By 和 Having

半城伤御伤魂 提交于 2019-11-29 09:15:26
现有以下的学生信息表: 若果现在想计算每个班的平均年龄,使用where的操作如下: SELECT Cno AS 班级, AVG(Sage) AS 平均年龄 FROM stu Where Cno=5; 这样的话,有多少个班就需要操作几次 因此引入分组 GROUP BY子句,根据列来分组,先看一下《MySQL必知必会》的提示: 引入分组后,操作如下: SELECT Cno AS 班级,AVG(Sage) AS 平均年龄 FROM stu GROUP BY Cno; 由此可以理解,GROUP BY 根据给出的列进行分组,具有相同列属性的被分到一组,然后你需要对组内的数据执行什么操作,就和平常的一样,只是操作的不再是所有的数据,而是分组后的。 过滤分组 使用GROUP BY将数据分组后,还可以使用HAVING过滤分组,规定包括哪些分组,排除哪些分组,比如想在上述的学生信息表中,找出多于2个人的班级,使用以下的操作 SELECT Cno AS 班级,COUNT(Cno) AS 人数 FROM stu GROUP BY Cno HAVING COUNT(Cno)>=2; 关于HAVING和WHERE的区别 《MySQL必知必会》 HAVING和WHERE的差别 这里有另一种理解方法,WHERE在数据 分组前进行过滤,HAVING在数据分组后进行过滤。 这是一个重 要的区别

Mysql高手系列 - 第9篇:详解分组查询,mysql分组有大坑!

倾然丶 夕夏残阳落幕 提交于 2019-11-29 09:13:50
这是Mysql系列第9篇。 环境:mysql5.7.25,cmd命令中进行演示。 本篇内容 分组查询语法 聚合函数 单字段分组 多字段分组 分组前筛选数据 分组后筛选数据 where和having的区别 分组后排序 where & group by & having & order by & limit 一起协作 mysql分组中的坑 in多列查询的使用 分组查询 语法: SELECT column, group_function,... FROM table [WHERE condition] GROUP BY group_by_expression [HAVING group_condition]; 说明: group_function:聚合函数。 group_by_expression:分组表达式,多个之间用逗号隔开。 group_condition:分组之后对数据进行过滤。 分组中,select后面只能有两种类型的列: 出现在group by后的列 或者使用聚合函数的列 聚合函数 函数名称 作用 max 查询指定列的最大值 min 查询指定列的最小值 count 统计查询结果的行数 sum 求和,返回指定列的总和 avg 求平均值,返回指定列数据的平均值 分组时,可以使用使用上面的聚合函数。 准备数据 drop table if exists t_order; --

MySQL聚合函数与数据分组

不打扰是莪最后的温柔 提交于 2019-11-29 09:03:09
  我们最常需要的是汇总数据而不是把他们实际检索出来 确定表中行数(或满足某个条件或包含某个特定值的行数) 确定表中行组的和 找出表列(或所有行或特定列)的最大值,最小值和平均值    聚集函数是运行在行组上,计算和返回单个值的函数。 AVG([distinct] expr) 求平均值 COUNT({*|[distinct] } expr) 统计行的数量 MAX([distinct] expr) 求最大值 MIN([distinct] expr) 求最小值 SUM([distinct] expr) 求累加和 AVG,SUM   只用于单个列,为获得多个列的平均值要使用多个AVG, 表中列值为null的行不参与计算    要想列值为NULL的行也参与组函数的计算,必须使用 IFNULL函数对NULL值做转换。 COUNT count(*):返回表中行的数量,不管列表中包含NULL值还是非NULL值, distinct不能用于count(*) count(列):返回列值 非空的行 的数量 count(distinct 列):返回列值非空的、并且列值不重复的行的数量 count(expr):根据表达式统计数据 select UNIT as '单位', -> COUNT(TO_DAYS(DATE)=TO_DAYS(NOW()) or null) as '今日统计', -> COUNT

oracle数据分组

梦想的初衷 提交于 2019-11-29 09:00:23
一,什么是分组函数 分组函数作用于一组数据,并对一组数据返回一个值 二,分组函数类型 Avg ,count,max,min,stddev(标准方差),sum。 函数名称 函数描述 Count 返回找到的记录数 Min 返回一个数字列或计算列的最小值 Max 返回一个数字列或计算列的最大值 Sum 返回一个数字列或计算列总和 avg 返回一个数字列或计算列的平均值 三,分组函数的语法 SELECT [ column ,] group_function(column), ... FROM table [WHERE condition ] [GROUP BY column ] [ORDER BY column ]; //返回总记录数 //* 代表的是:一条记录 SQL> select count(*) from emp; //返回 comm不为空的 总记录数 SQL> select count(comm) from emp; //COUNT( DISTINCT expr) 返回 expr 非空且不重复 的记录总数 SQL> select count(distinct(sal)) from emp; 注意:组函数 忽略空值 。 //返回所有员工的平均工资 SQL> select avg(nvl(sal,0)) from emp; 注意: NVL函数使分组函数无法忽略空值 /

08-oracle统计函数(单组分组函数)

一笑奈何 提交于 2019-11-29 08:59:51
--count时尽量count(列名),count(*)也可以。 --count,max,min,sum,avg,median(中位数) select count(empno),count(distinct job),max(hiredate),min(hiredate),sum(sal),round(avg(sal),2) from emp; --median:中位数(中间值),一组按大小顺序排列的数据,处于中间位置的数。 --行数为奇数时取中间行的数值(19行/2取9行的值),偶数时取中间2行数值的平均值(若18行则中位数的值为(9行+10行)除以2)。 --如sal共15行,第8行即中位数(中间值) select median(sal) from emp; --使用group by统计每个部门的人数 select deptno,count(deptno) from emp where deptno is not null group by deptno; --group by 以职位分组,查询出每个职位的最低和最高工资 select job,min(sal),max(sal) from emp group by job; --数据统计时,语句中没有group by时,select的选项只能出现统计函数(count(),sum(),max(),min(),avg()); -

单表查询

寵の児 提交于 2019-11-29 04:46:07
单表查询的语法 复制代码 查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,然后打开文件,按照你的查询条件来找出你需要的数据。下面是完整的一个单表查询的语法 select * from,这个select * 指的是要查询所有字段的数据。 SELECT distinct 字段1,字段2... FROM 库名.表名 #from后面是说从库的某个表中去找数据,mysql会去找到这个库对应的文件夹下去找到你表名对应的那个数据文件,找不到就直接报错了,找到了就继续后面的操作 WHERE 条件 #从表中找符合条件的数据记录,where后面跟的是你的查询条件 GROUP BY field(字段) #分组 HAVING 筛选 #过滤,过滤之后执行select后面的字段筛选,就是说我要确定一下需要哪个字段的数据,你查询的字段数据进行去重,然后在进行下面的操作 ORDER BY field(字段) #将结果按照后面的字段进行排序 LIMIT 限制条数 #将最后的结果加一个限制条数,就是说我要过滤或者说限制查询出来的数据记录的条数 关于上面这些内容,我们在下面一个一个的来详细解释 复制代码 二 关键字的执行优先级(重点) 复制代码 复制代码 重点中的重点:关键字的执行优先级 from where group by having select distinct order by limit

mysql分组、合并语句

谁说胖子不能爱 提交于 2019-11-29 00:52:15
MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 数据如下: Sql代码 mysql> select * from aa; + ------+------+ | id| name | + ------+------+ |1 | 10| |1 | 20| |1 | 20| |2 | 20| |3 | 200 | |3 | 500 | + ------+------+ 6 rows in set (0.00 sec) 1.以id分组,把name字段的值打印在一行,逗号分隔(默认) Sql代码 mysql> select id,group_concat( name) from aa group by id; + ------+--------------------+ | id| group_concat( name) | + ------+--------------------+ |1 | 10,20,20| |2 | 20 | |3 | 200,500| + ------+--------------------+ 3 rows in set (0.00 sec) 2.以id分组,把name字段的值打印在一行,分号分隔

单表查询

本小妞迷上赌 提交于 2019-11-28 21:45:14
一、单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二、关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 from where group by having select distinct order by limit 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组 4.将分组的结果进行having过滤 5.执行select 6.去重 7.将结果按条件排序:order by 8.限制结果的显示条数 创建公司员工表,表的字段和数据类型 company.employee 员工id id int 姓名 name varchar 性别 sex enum 年龄 age int 入职日期 hire_date date 岗位 post varchar 职位描述 post_comment     varchar 薪水 salary     double 办公室 office int 部门编号 depart_id int #创建表,设置字段的约束条件 create table employee( id int primary