- 浏览: 172014 次
- 来自: 深圳
文章分类
最新评论
-
GGGGeek:
MySQL5.7.24varchar(65532)报错:107 ...
int(11)最大长度是多少,MySQL中varchar最大长度是多少?
group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。
SELECT子句中的列名必须为分组列或列函数。列函数对于GROUP BY子句定义的每个组各返回一个结果。
某个员工信息表结构和数据如下:
id name dept salary edlevel hiredate
1 张三 开发部 2000 3 2009-10-11
2 李四 开发部 2500 3 2009-10-01
3 王五 设计部 2600 5 2010-10-02
4 王六 设计部 2300 4 2010-10-03
5 马七 设计部 2100 4 2010-10-06
6 赵八 销售部 3000 5 2010-10-05
7 钱九 销售部 3100 7 2010-10-07
8 孙十 销售部 3500 7 2010-10-06
例如,我想列出每个部门最高薪水的结果,sql语句如下:
SELECT DEPT, MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT
查询结果如下:
DEPT MAXIMUM
开发部 2500
设计部 2600
销售部 3500
解释一下这个结果:
1、满足“SELECT子句中的列名必须为分组列或列函数”,因为SELECT有GROUP BY DEPT中包含的列DEPT。
2、“列函数对于GROUP BY子句定义的每个组各返回一个结果”,根据部门分组,对每个部门返回一个结果,就是每个部门的最高薪水。
注意:计算的是每个部门(由 GROUP BY 子句定义的组)而不是整个公司的 MAX(SALARY)。
例如,查询每个部门的总的薪水数
SELECT DEPT, sum( SALARY ) AS total
FROM STAFF
GROUP BY DEPT
查询结果如下:
DEPT total
开发部 4500
设计部 7000
销售部 9600
将 WHERE 子句与 GROUP BY 子句一起使用
分组查询可以在形成组和计算列函数之前具有消除非限定行的标准 WHERE 子句。必须在GROUP BY 子句之前指定 WHERE 子句。
例如,查询公司2010年入职的各个部门每个级别里的最高薪水
SELECT DEPT, EDLEVEL, MAX( SALARY ) AS MAXIMUM
FROM staff
WHERE HIREDATE > '2010-01-01'
GROUP BY DEPT, EDLEVEL
ORDER BY DEPT, EDLEVEL
查询结果如下:
DEPT EDLEVEL MAXIMUM
设计部 4 2300
设计部 5 2600
销售部 5 3000
销售部 7 3500
注意:在SELECT语句中指定的每个列名也在GROUP BY子句中提到。未在这两个地方提到的列名将产生错误。
GROUP BY子句对DEPT和EDLEVEL的每个唯一组合各返回一行。
在GROUP BY子句之后使用HAVING子句
可应用限定条件进行分组,以便系统仅对满足条件的组返回结果。为此,在GROUP BY子句后面包含一个HAVING子句。HAVING子句可包含一个或多个用AND和OR连接的谓词。每个谓词将组特性(如AVG(SALARY))与下列之一进行比较:
例如:寻找雇员数超过2个的部门的最高和最低薪水:
SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM
FROM staff
GROUP BY DEPT
HAVING COUNT( * ) >2
ORDER BY DEPT
查询结果如下:
DEPT MAXIMUM MINIMUM
设计部 2600 2100
销售部 3500 3000
例如:寻找雇员平均工资大于3000的部门的最高和最低薪水:
SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM
FROM staff
GROUP BY DEPT
HAVING AVG( SALARY ) >3000
ORDER BY DEPT
查询结果如下:
DEPT MAXIMUM MINIMUM
销售部 3500 3000
来源:http://www.5iphp.com/node/62
发表评论
-
PHP+MYSQL大小写问题
2014-11-21 11:33 1594[PHP]一、大小写敏感 1. 变量名区分大小写 所有变 ... -
sqlstate[HY000][2002]php_network_getaddresses 错误
2014-04-09 14:45 3759sqlstate[HY000][2002]php_netw ... -
MySQL中的datetime与timestamp比较
2013-09-17 16:29 1993相同 显示 TIMESTAMP列的显示格式与DATETI ... -
mysql 二进制
2013-09-17 16:26 4557MYSQL的binary解决mysql数据大小写敏感问题 ... -
提高php代码质量 36计
2013-08-26 17:31 7891.不要使用相对路径常常会看到: 复制代码 requi ... -
MySQL 的 10 个技巧
2013-08-23 11:46 692避免编辑转储文件 Mysq ... -
MySql如何插入和查询二进制数据
2013-08-15 22:31 4821Mysql:bit类型的查询与插入mysql有种字段类型是b ... -
MySQL字符集查看方法
2013-08-09 16:41 740MySQL字符集多种多样,下面为列举了其中三种最常见的字符 ... -
SELECT INTO FROM与INSERT INTO SELECT区别
2013-08-06 16:49 1283select * into destTbl from s ... -
php mysql临时表的应用
2013-07-30 10:29 2279当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大 ... -
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013-07-25 15:06 970php 获取今日、昨日、 ... -
mysql查询今天,昨天,近7天,近30天,本月,上一月数据的方法
2013-07-25 15:05 1392mysql查询今天,昨天,近7天,近30天,本月,上一月数据 ... -
MySQL 获得当前日期时间 \ 时间戳 函数 \ 时间转换函数
2013-07-19 17:01 1110一、MySQL 获得当 ... -
int(11)最大长度是多少,MySQL中varchar最大长度是多少?
2013-07-18 10:55 24649int(11)最大长度是多少? 在SQL语句 ... -
如何用MYSQL删除表中重复数据
2013-09-10 10:45 1654通常情况下,一个我们在 ... -
mysql取随机5条记录
2013-05-20 15:37 0SELECT * FROM `table` AS t1 JOI ... -
MySQL之alter语句用法总结
2013-08-21 16:56 572MySQL之alter语句用法总结 1:删除列 ALT ... -
order by + limit非常慢的问题解析
2013-04-27 09:07 0发现其sql如下: mysql> ... -
on duplicate key update, insert ignore into, replace into等的一些用法总结
2013-03-29 10:23 0在MySQL中进行条件插入数据时,可能会用到以下语句,现小 ... -
MySQL中UNION和UNION ALL的使用
2013-03-28 21:05 1251来源:http://hi.baidu.com/du ...
相关推荐
mysql group by用法:文章以图文并茂的方式详细介绍了mysql group by用法,包含语法和sql的使用、与where子句连用、与having子句连用等方式。
本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表 我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下 明显。这不是我想...
having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。 SQL实例: 一、显示每个地区的总人口数和总面积. ...
对于初学者来说,一般用学生及其选课等信息这些基本的操作入手。...group by 表示 以······分组, 查询表中被选人数少于3的课程及人数: having 后跟附加条件, 4、其他聚集函数的应用: 最大值max()、最
MySQL数据库优化SQL20、查询显示每个雇员加入公司的准确时间,按××××年××月××日 时分秒显示; select ename, to_char(hiredate, 'yyyy... having avg(sal) = (select min(avg(sal)) from emp group by deptno))
select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2、查询出所有数据进行分组之后,和重复数据的重复次数的查询数据,先列下: select count...
但是,在某些情况下,我们需要显式地对记录进行分组,使用的是group by [column1,column2…]。 这样,查询结果将会根据group by后面的字段,将值相同的记录分成一组。举个例子,我有一份管理学生信息的表,这时候我...
GROUP BY sid HAVING 平均成绩 > 60; SELECT sid, AVG(score) FROM sc GROUP BY sid HAVING AVG(score)>60; -- 3、查询所有同学的学号、姓名、选课数、总成绩; SELECT s.sid 学号, s.sname 姓名, COUNT(*) 选...
having, 在group by 之前司以使用where, 即表示对过滤后的结果分组): mysql> select employee921.id,employee921.name,employee921.salary,employee921.dep tid tid from employee921 where salary > (select avg...
select .......[where|group by|order by|having].... # DML数据操作语言 处理表内的数据 insert update delete # TPL事务处理语言 运维常用 commit提交实务,mysql默认commit开启 rollback回滚事务 # DCL...
group by + having:【注】having只能用于group by。而where是用来过滤表数据的 group by + with rollup:分组+小计 限制记录limit:限制取出记录的数量,要写在SQL语句的最后 标准的SQL书写格式
group by 分组的字段 【order by 排序的字段】; 注意: 查询列表必须特殊,要求是分组函数和group by后出现的字段 特点: 1、分组查询中的筛选条件分两类 数据源 位置 关键字 分组前筛选 原始表 group by前面 ...
select title,count(*) as count from user_table group by title having count>1; SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC 一、查找重复...
MySql的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...
select group by having order by limit desc asc count sum avg max min resource mysql_connect(host,root,password); mysql_close(); bool mysql_select_db(tablename[,],连接返回变量); resource mysql_query...
MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...
having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。SQL实例: 一、显示每个地区的总人口数和...
如果GROUP BY子句后面带着HAVING关键字,那么只有满足“条件表达式2”中指定的条件的记录才能够输出。GROUP BY子句通常和COUNT()、SUM()等聚合函数一起使用。 如果有ORDER BY子句,就按照“属性名2”指定的字段进行...