sql分组

mysql-分组

不问归期 提交于 2019-12-01 06:11:44
**主要是记录一下 with rollup和coalesce的用法 MySQL GROUP BY 语句 GROUP BY 语句根据一个或多个列对结果集进行分组。 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。 GROUP BY 语法 SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name; 实例演示 本章节实例使用到了以下表结构及数据,使用前我们可以先将以下数据导入数据库中。 SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for `employee_tbl` -- ---------------------------- DROP TABLE IF EXISTS `employee_tbl`; CREATE TABLE `employee_tbl` ( `id` int(11) NOT NULL, `name` char(10) NOT NULL DEFAULT '', `date` datetime NOT NULL, `singin` tinyint

sql中order by和group by的区别

梦想与她 提交于 2019-12-01 05:09:08
order by 和 group by 的区别: 1,order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。 2,group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。 3,在使用group by的语句中,只能select用于分类的列(表达式),或聚合函数。where条件用于group by之前,having用于group by 之后对结果进行筛选。 扩展资料: 一、order by用法: 排序查询、asc升序、desc降序 示例: 1.select * from 学生表 2.order by 年龄 3.查询学生表信息、按年龄的升序(默认、可缺省、从低到高)排列显示也可以多条件排序、 比如 order by 年龄,成绩 desc 4.按年龄升序排列后、再按成绩降序排列。二、group by用法: 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。 示例: 1.select 学号,SUM(成绩) from 选课表 group by 学号 按学号分组、查询每个学号的总成绩 2.select 学号,AVG(成绩) from 选课表 3.group by

3、条件查询

白昼怎懂夜的黑 提交于 2019-12-01 02:43:43
1 语法格式: select 字段,字段... from 表名 where 条件; 执行顺序:先from,然后where,最后select 1. 查询工资等于5000的员工姓名? select enamel from emp where sal = 5000 ; 2. 查询Smith的工资 select enamel from emp where ename = 'Smith' ;字符串使用单引号括起来 注意: 在数据库中 null 不是一个值,代表什么也没有,为空 空不是一个值,不能用等号衡量 必须使用 is null 或者 is not null and 和 or 连起来使用 注意:当运算符的优先级不确定的时候加小括号。 in等同于 or:找出工作岗位是m 或 n的员工 select ename,job from emp where job = 'm' or job = 'n'; select ename,job from emp where job in('m','n'); select ename,job from emp where job in('1000,'5000') in后面的值不是区间,是具体的值 not in:不在这几个值之间 模糊查询 like 找出名字中含有o的? (在模糊查询当中,必须掌握两个特殊的符号,一个是%,另一个是_) %代表多个字符,

Mysql 单表查询-排序-分页-group by初识

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 00:18:35
Mysql 单表查询-排序-分页-group by初识 对于select 来说, 分组聚合(((group by; aggregation), 排序 ( order by** ), 分页查询 ( limit ), 等这些操作, 都是结合 where 过滤(算术表达式, 逻辑表达式, 判空, 范围过滤, 模糊查询), 来进一步对数据集为所欲为地操作哦, group by 也是我工作中每天都必用的, 因为我每天要拆分数据嘛, 先按一或多个字段 group by, 然后, 再对每组的抑或多个字段进行聚合(sum, avg, max, quartile...)等 . 直接来理解SQL分组聚合, 一开始还是不容易的, 一个是对group by 不熟, 另一个对sql语句不熟. 针对这点, 我是每天都在 用Excel的透视表 , 各种透视, 多条件透视, 整吐了过后, 就彻底明白了. 虽然我是有些讨厌Excel, 但不得不说, 它能让你直观地理解很多 数据, 数据结构, 编程相关的概念 . 数据依然是上篇, students表(where 初识那一篇). 准备测试数据 -- win 下, 进入终端 (cmd + R) mysql -u root -p C:\Users\chenjie>mysql -u root -p Enter password: ******** -- 再重新来手打一遍吧,

LeetCode——Duplicate Emails(使用group by以及having解决分组统计结果)

纵然是瞬间 提交于 2019-11-30 22:24:21
Write a SQL query to find all duplicate emails in a table named Person. +----+---------+ | Id | Email | +----+---------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | +----+---------+ For example, your query should return the following for the above table: +---------+ | Email | +---------+ | a@b.com | +---------+ Note: All emails are in lowercase. 题意:查找表中重复的 Email . 此题是很典型的对分组结果进行统计筛选例题,因此可以利用 group by 进行分组,然后使用 having 统计. # Write your MySQL query statement below SELECT Email FROM Person GROUP BY Email HAVING COUNT(Email) > 1; 此处,对 where 与 group by 进行比较(引用自: https://leetcode-cn.com/problems

MySQL总结

99封情书 提交于 2019-11-30 21:29:50
MySql的主要存储引擎有哪些,主要区别? MYISAM INNODE MEMORY 区别: MYISAM: 它不支持事务,也不支持外键 INNODE: InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全.但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引 MEMORY: 使用存在内存中的内容来创建表 sql功能分类 DDL: 数据定义语言 用来定义数据库对象:创建库、表、列等 DML: 数据操作语言 用来操作数据表中的记录 DQL: 数据查询语言 用来查询数据 DCL: 数据控制语言 用来定义访问权限和安全级别 Mysql数据类型分三类 1.数值 2.字符串 3.时间日期 常见的数据类型: 1.double浮点型 2.char固定长度字符串 3.varchar可变长字符串类型 4.text长字符串 5.blob二进制类型 6.date日期类型格式为:yyyy-MM-dd 7.time时间类型格式为:hh:mm:ss DDL(数据定义语言) 1.创建数据库 create database 数据库名 charset=utf8; 2.使用(切换)数据库 use 数据库名; 3.添加一列 ALTER TABLE 表名 ADD 列名 数据类型; 4.删除一列 ALTER TABLE 表名 DROP 列名; 5.删除表

数据库

青春壹個敷衍的年華 提交于 2019-11-30 18:45:16
什么是数据库 # 用来存储数据的仓库 # 数据库可以在硬盘及内存中存储数据 # 数据库与文件存储数据区别 # 数据库本质也是通过文件来存储数据, 数据库的概念就是系统的管理存储数据的文件 数据库介绍 数据库服务器端: 存放数据库的主机集群 数据库客户端: 可以连接数据库的任意客户端 数据库管理员: 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

子查询/联合分组/all与any/视图/事务

青春壹個敷衍的年華 提交于 2019-11-30 13:36:01
子查询 将一条查询sql的结果作为另一条sql的条件 使用方法总结: # 增:insert into 表 select子查询 # 删:delete from 表 条件是select子查询(表不能与delete表相同) # 查:select 字段 from 表 条件是select子查询 # 改:update 表 set 字段=值 条件是select子查询(表不能与update表相同) 联合分组: 按多个字段综合结果进行分组 使用方法总结: # 按 area与port组合后的结果进行分组,只有组合后的结果还一致,才认为是一组 select group_concat(name),area,port from emp group by area,port; 区间修饰条件(all与any): 使用方法总结: # 语法规则 # where id in (1, 2, 3) => id是1或2或3 # where id not in (1, 2, 3) => id不是1,2,3 # where salary < all(3, 6, 9) => salary必须小于所有情况(小于最小) # where salary > all(3, 6, 9) => salary必须大于所有情况(大于最大) # where salary < any(3, 6, 9) => salary只要小于一种情况(小于最大)

Mysql基础知识

笑着哭i 提交于 2019-11-30 13:33:59
Mysql学习 """ 1、字段修改 alter modify alter change alter add ''|first|after alter drop 2、表关系: 一对一:外键存在两边都可以 一对多:外键存在多的一方 多对多:外键必须存在第三张关系表 外键:外键是表的一个字段,值可以重复也可以唯一,值是被关联表被关联字段的值,被关联字段必须有唯一键 foreign key(外键字段) references 被关联表(被关联字段) create table book( id int not null primary key auto_increment, name varchar(64) unique ); create table author( id int not null primary key auto_increment, name varchar(64) unique ); create table book_author( id int not null primary key auto_increment, book_name varchar(64), author_name varchar(64), foreign key(book_name) references book(name) on update cascade on delete

叁拾陆--数据库表数据查询

人盡茶涼 提交于 2019-11-30 12:32:44
一、单表查询 ​ 1.增: insert [into] [数据库名.]表名[(字段1[, ..., 字段n])] values (数据1[, ..., 数据n])[, ..., (数据1[, ..., 数据n])]; ​ 2.删除: delete from [数据库名.]表名 [条件]; ​ 3.改: updata [数据库名.]表名 set 字段1=值1[, ..., 字段n=值n] [条件]; ​ 4.查: select [distinct] 字段1 [[as] 别名1],...,字段n [[as] 别名n] from [数据库名.]表名 [条件]; ​ 条件:from、where、group by、having、distinct、order by、limit => 层层筛选后的结果。 ​ 注:一条查询语句,可以拥有多种筛选条件,条件的顺序必须按照上方顺序进行逐步筛选,distinct稍有特殊(书写位置),条件的种类可以不全,可以缺失,但不能乱序。 二、去重:distinct mysql>: create table t1( id int, x int, y int ); mysql>: insert into t1 values(1, 1, 1), (2, 1, 2), (3, 2, 2), (4, 2, 2); mysql>: select distinct * from