sql分组

sql中的group by 用法解析

人盡茶涼 提交于 2019-12-25 04:01:07
这是以前学习数据库查询时从网上找的资料,都保存到本地的word文档,现在也拿出来分享分享吧,是别人的。 -- Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。 --它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 --注意:group by 是先排序后分组; --举例子说明:如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术 select DepartmentID as '部门名称', COUNT(*) as '个数' from BasicDepartment group by DepartmentID --这个就是使用了group by +字段进行了分组,其中我们就可以理解为我们按照了部门的名称ID --DepartmentID将数据集进行了分组;然后再进行各个组的统计数据分别有多少; --如果不用count(*) 而用类似下面的语法 select DepartmentID,DepartmentName from BasicDepartment group by DepartmentID --将会出现错误 --消息 8120,级别 16,状态 1,第 1 行 --选择列表中的列 'BasicDepartment

MySQL中having与where

为君一笑 提交于 2019-12-25 03:56:23
having与where区别: where中不可以用聚合函数(条件字段是未分组中的字段),having中可以用聚合函(条件字段是分组后字段)。不过这里也很好理解,SQL语句在执行是先执行select xxx where语句,再对结果集进行分组。 where子句用来筛选 FROM 子句中指定的操作所产生的行。 group by 子句用来分组 WHERE 子句的输出。 having 子句用来从分组的结果中筛选行 需要注意说明:当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下: 执行where子句查找符合条件的数据; 使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组。 having 子句中的每一个元素也必须出现在select列表中。有些数据库例外,如oracle. having子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限制。 having子句限制的是组,而不是行。where子句中不能使用聚集函数,而having子句中可以。 来源: https://www.cnblogs.com/webph/p/6679707.html

Oracle数据库语言——结构化查询语言SQL

删除回忆录丶 提交于 2019-12-25 00:45:23
一、数据定义语言DDL 1.创建表空间 :CREAT TABLESPACE lyy DATAFILE 'C:/app/lyy.dbf' SIZE 10M;(创建一个10M的表空间,存放在C盘app文件夹中) 删除表空间:DROP TABLESPACE lyy; 2.创建用户 和赋权:CREAT USER lyy PROFILE DEFAULT IDENTIFIED BY 123456 DEFAULT TABLESPACE lyy TEMPORARY TABLESPACE temp ACCOUNT UNLOCK; (创建用户lyy,默认密码为123456,默认表空间为lyy,临时表空间为temp,账号开启状态) GRANT CONNECT TO lyy; GRANT RESOURCE TO lyy;(赋予用户lyy connect和resource权限) 3.创建表 语法格式:CREAT TABLE 表名(属性名1 数据类型(长度),属性名2 数据类型......属性名n 数据类型); 例:创建以下三个表: --学生表 student:学号 sid、姓名 sname、性别 ssex、年龄 sage、电话 sphone --课程表 course: 课程编号 cid、课程名称 cname、老师名称 tname、课时 chour --成绩表 score: 成绩编号 scid、学号 sid

Oracle实现分组统计记录

旧街凉风 提交于 2019-12-23 02:26:19
今天刚上班不久,QQ滴滴的响个不停,看了下信息是一个网友要我帮忙下一个SQL语句,大体意思是:统计heart_active字段为不同情况的记录数,然后按时间来分组。 我想了下,心里想这好办,于是马上建了一个表,语句如下: CREATE TABLE rfid_fixed_heart (input_date date, heart_active VARCHAR2(2)); 接下来往rfid_fixed_heart表中插入了数据,heart_active字段为0和1, input_date中插入YYYY-MM-DD格式的数据。 后来就写了下面两个SQL给她,语句一和语句二有点区别,语句一快一统计出heart_active字段为不同情况的记录数,而语句二则只统计heart_active字段为0和1情况的记录数,两个语句的输出格式也有不同。具体如下: 语句一: SELECT a.input_date, a.heart_active, SUM(decode(a.heart_active, 1, 1, 0, 1)) FROM rfid_fixed_heart a GROUP BY a.heart_active, a.input_date ORDER BY a.input_date DESC; 语句二: SELECT a.input_date, SUM(decode(a.heart_active,

SQL Server T-SQL高级查询

≯℡__Kan透↙ 提交于 2019-12-22 11:33:09
高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select distinct sex from student; --count 统计 select count(*) from student; select count(sex) from student; select count(distinct sex) from student; --top 取前N条记录 select top 3 * from student; --alias column name 列重命名 select id as 编号, name '名称', sex 性别 from student; --alias table name 表重命名 select id, name, s.id, s.name from student s; --column 列运算 select (age + id) col from student; select s.name + '-' + c.name from classes c, student s where s.cid = c.id; --where 条件 select

SQL Fundamentals || Oracle SQL语言

丶灬走出姿态 提交于 2019-12-22 00:02:00
SQL Fundamentals || Oracle SQL语言 子查询(基础) 1、认识子查询 2、WHERE子句中使用子查询 3、在HAVING子句中使用子查询 4、在FROM子句中使用子查询 5、在SELECT子句中使用子查询 6、WITH子句 子查询(进阶) 7、分析函数 8、行列转换 9、设置数据层次 一、认识子查询 子查询就是指的在一个完整的查询语句之中, 嵌套若干个不同功能的小查询 ,从而一起完成 复杂查询(复杂查询 = 限定查询 + 多表查询 + 统计查询 + 子查询) 的一种编写形式,为了让读者更加清楚子查询的概念。 一个查询语句内部可以定义多个子查询; 子查询一般在 WHERE 、 FROM 、 HAVING 子句之中出现较多,也可以在 SELECT 子句中出现 . 例子 1 、查询公司中工资最低的雇员的完整信息 分析: 1. 查询最低工资: SELECT MIN(sal) FROM emp; 2. 查询等于最低工资的雇员的信息: SELECT * FROM emp WHERE sal=( SELECT MIN(sal) FROM emp;); 子查询可以返回 的结果数据类型 一共分为四种: 单行单列 返回的是 一个具体列 的内容,可以理解为一个 单值数据 ; 单行多列 返回一行数据中 多个列的内容 ; 多行单列 返回多行记录之中 同一列的内容

MySQL高级查询

流过昼夜 提交于 2019-12-21 16:48:46
在工作中经常需要汇总数据而不是将他们全部检索出来(实际数据本身:返回实际数据是对时间和处理资源的浪费),这种类型的检索有如下特点: 1:确定表中的行数(或满足某个条件或包含某个特定值的行数) 2:获得表中行组的和 3:找出表列(或所有行或某些特定的行)的最大值,最小值和平均值 聚集函数:运行在行组上,计算和返回单个值的函数; SQL聚集函数如图: 1,avg()函数通过对表中行数计数并计算特定列值之和,求得该列的平均值;avg()可用来返回所有平均值,也可以用来返回特定列的平均值; SELECT AVG(id) as age FROM person; avg()也可以用来确定特定列或行的平均值,如: SELECT AVG(id) as age FROM person WHERE age = 15; avg()只用来确定特定数值列的平均值,而且列名必须作为函数参数给出,为了获得多个列的平均值,必须使用多个avg()函数{avg()函数忽略列值为null的行}; 2,count()函数:确定表中行的数目或符合特定条件的行的数目. count()函数有两种使用方式: 1:使用count(*)对表中行的数目进行计数,不管表列中包含的是空值(null)还是非空值; 2:使用count(column)对特定列中具有值的行进行计数,忽略null值; SELECT count(*) as age

SQL语法(1)

拜拜、爱过 提交于 2019-12-20 11:30:01
一、认识SQL: 1.什么是SQL? Structured Query Language:结构化查询语言 其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。 2.SQL通用语法: SQL语句可以单行或多行书写,以分号结尾。 可使用空格和缩进来增强语句的可读性 MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。 三种注释:   单行注释①:-- 注释内容(注意--后面有一个空格) 单行注释②:#注释内容(mysql特有) 多行注释:/*注释内容*/ 3.SQL的分类: ①:DDL:数据定义语言,用来定义数据库对象:数据库、表、列等。     关键字:create、drop、alter等 ②:DML:数据库操作语言,用来对数据库中表的数据进行增删改。     关键字:insert、delete、update等 ③:DQL:数据查询语句,用来查询数据库中表的记录(数据)。     关键字:select、where等 ④:DCL:数据库控制语言(了解),用来定义数据库的访问权限和安全级别,以及创建用户。     关键字:GRANT,REVOKE等 图解这四种SQL语言: 二、DDL: *****操作数据库:CRUD 1、C(Create):创建: ①创建数据库: create database 数据库名称; ②创建数据库,判断不存在

链接查询和分组查询

点点圈 提交于 2019-12-19 07:36:04
分组查询 select 查询信息 from 表名 where 条件 group by 按照列分组(可多个 ,隔开) order by 排序方式 (查询信息如果列名和聚合函数同时出现,要么在聚合函数中出现,要么就使用分组进行查询) having 条件 分组筛选(一般和group by连用,位置在其后) where:用来筛选from子句指定的操作所产生的行 group by:用来分组where子句输出 having:用来从分组的结果中筛选行 1.分组查询是针对表中不同的组分类统计和输出的 2.having子句能够在分组的基础上,再次进行筛选 3.在SQL语句中使用次序,where-->group by-->having 表连接 select 列 from 表1,表2 where 条件(表1.主键列=表2.外键列) 内连接(inner join) select 列 from 表1 inner join 表2 on 条件(表1.主键列=表2.外键列) as也可以为表赋别名 外连接(两外连接主表位置相反) 左外连接(left join) select 列 from 主表 left outer join 从表 on (表1.主键列=表2.外键列) 右外连接(right join) select 列 from 从表 right outer join 主表 on (表1.主键列=表2.外键列)

mysql-查询(DQL)

落爺英雄遲暮 提交于 2019-12-18 16:02:05
+ 注释:mysql中的+号只有一个作用,就是运算符,没有连接字符串的作用,连接字符串用concat。 select 1+3;两个操作数都是数值型,则做加法运算。 select 'wj'+28; select '3'+94;只要其中有一个时字符型,则会试图将字符转换为数值型。如果转换成功,则做加法运算;如果转换失败,则将字符转换为0继续做加法运算。 select null+100;如果其中一方为null,则结果肯定为null。 concat(str1,str2,…) 注释:连接多个字符串 select concat('a','b','c'); select concat(first_name,last_name) from employees; 条件运算符:> < = != <> >= <= 注释:mysql支持两个形式的不等运算符,!=和<>都支持,但是建议<>。 作用:用于在where关键词后,用于条件筛选。 select * from employees where salary<>100; 逻辑运算符:and or not 注释:逻辑运算符用于连接条件表达式,可以用括号把条件包起来进行逻辑运算。    and(&&)两个条件都是true,则结果为true。    or(||)两个条件有一个为true,则结果为true。    not(!)条件如果为true