`
regedit_123
  • 浏览: 317574 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

group by和order by详解

 
阅读更多

select
u1,sum(u2),u3,sum(u4) -- A位置
from student
group by  u2, u3 -- B位置

A位置中没有出现在B位置的字段必须使用聚集函数,在B位置出现的字段分组,分组的含义就是这些字段都相等的合并为一条数据。

如上面sql的行已就是:把u2,u3相等的记录合并为一条,u2,u4的值为加总的。


-------------------------------------------------------------------------------------

在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句返回满足having条件的组。

在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数

select max(sal),job emp group by job;
(注意:select job的job在此处会 显示 按job分组的第一个job字段,无意义)


查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方,在where 子句中不能使用聚组函数。

select deptno,sum(sal) from emp where sal>1200 group by deptno having sum(sal)>8500 order by deptno;

当在gropu by 子句中使用having 子句时,查询结果中只返回满足having条件的组。在一个sql语句中可以有where子句和having子句。having 与where 子句类似,均用于设置限定条件

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

查询每个部门的每种职位的雇员数(先按deptno分组,在deptno分好的组中再按job分组)
select deptno,job,count(*) from emp group by deptno,job;





/* group by 详解 */

drop table if exists wage;

create table wage(
    id int not null auto_increment,
    stafferId int not null,
    monthId int not null,
    money double not null,
    primary key (id)
)
*/

/* 初始化数据 */
-- insert into wage(stafferId,monthId,money) values(1,1,500),(2,1,1000),(3,1,1200),(1,2,1000),(2,2,2000),(3,2,1300),(1,3,1000),(2,3,1500),(3,3,1700);

1    1    1    500
2    2    1    1000
3    3    1    1200
4    1    2    1000
5    2    2    2000
6    3    2    1300
7    1    3    1000
8    2    3    1500
9    3    3    1700




select stafferId as '员工编号',monthId as '月份',money as '工资' from wage
group by monthId

/*
result:
+----------+------+------+
| 员工编号 | 月份 | 工资 |
+----------+------+------+
|        1 |    1 |  500 |
|        1 |    2 | 1000 |
|        1 |    3 | 1000 |
+----------+------+------+

员工编号、工资 分别是表中1、2、3月份的第一条数据,无意义。应在select或group by中使用聚组函数
*/







/* order by详解 */

select * from wage
order by stafferId ASC, monthId DESC

先按stafferId升序排序,在stafferId一样的分组中(stafferId=1),再进行monthId降序排序

result:
+----+-----------+---------+-------+
| id | stafferId | monthId | money |
+----+-----------+---------+-------+
| 52 |         1 |       3 |  1000 |
| 49 |         1 |       2 |  1000 |
| 46 |         1 |       1 |   500 |
| 53 |         2 |       3 |  1500 |
| 50 |         2 |       2 |  2000 |
| 47 |         2 |       1 |  1000 |
| 54 |         3 |       3 |  1700 |
| 51 |         3 |       2 |  1300 |
| 48 |         3 |       1 |  1200 |
+----+-----------+---------+-------+

分享到:
评论

相关推荐

    mysql中count(), group by, order by使用详解

    mysql中order by 排序查询、asc升序、desc降序,group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

    【mysql知识点整理】— order by 、group by 出现Using filesort原因详解

    文章目录测试数据1 sql执行顺序2 order by 和 group by什么时候会出现Using filesort — 理论3 order by 和 group by什么时候会出现Using filesort — 实践3.1 不会出现 Using filesort的情况 — 符合最佳左前缀法则...

    详解partition by和group by对比

    今天大概弄懂了partition by和group by的区别联系。 1. group by是分组函数,partition by是分析函数(然后像sum()等是聚合函数); 2. 在执行顺序上, 以下是常用sql关键字的优先级 from > where > group by > ...

    数据库笔试题之查询语句where,group by,having,order by执行与编写顺序详解

    数据库复杂查询执行顺序与编写顺序原理及sql案例:同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序

    group by,having,order by的用法详解

    一,如果一个查询中使用了分组函数,任何不在分组函数中的列或表达式必须要在group by中,否则出错。 第一个查询中,deptno没有出现在group by中,也没有出现在分组函数中,因此出错。将deptno改成job就可以了。该条...

    详解SQL中Group By的用法

    GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。 1、概述 “Group By”从字面意义上理解就是根据...4、Group By 和 Order By 示例2 select 类别, sum(数量) AS 数量之和 from A group by 类别 or

    MySQL分组查询Group By实现原理详解

    由于GROUP BY 实际上也同样会进行排序操作,而且与ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作。当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算。所以,在GROUP BY ...

    Django框架models使用group by详解

    Django框架models使用group by详解: 首先,看下列代码: UserData.objects.filter(hubid=sensorid,time__range=(time2,time1)).values(‘hour’).annotate(sum_out=Sum(‘outdoor’), sum_in=Sum(‘indoor’), sum...

    ThinkPHP中order()使用方法详解

    即相当于是在select语句中一个order by的子句。 order方法属于模型的连贯操作方法之一,用于对数据库操作的结果进行排序。即相当于是在select语句中一个order by的子句。 用法 $Model->where('status=1')->order('...

    Sql开窗函数资源-Dark-Horse-Programmer.zip

    sql开窗函数详解 其中包括hadoop,hive,hdfs,shell,linux基础,开窗函数学习资料和讲解视频 川在川上曰:靠谱! SaL 的运行顺序 from 1 where 2group by 3having 4 select 5 基本查询开窗查询 order by 6 limit 7 ...

    Java数据库技术详解 DOC简版

    3.4 GROUP BY和HAVING子句 3.5 INSERT语句 3.6 UPDATE语句 3.7 DELETE语句 3.8 本章小结 第4章 PL/SQL 4.1 PL/SQL简介 4.2 PL/SQL基础 4.3 本章小结 第二篇 JDBC篇 第5章 JDBC技术基础 5.1 ...

    SQLServer中Partition By及row_number 函数使用详解

    partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指定那么它把整个结果集...

    hql语句语法详解hql语句

    下面介绍HQL语句的语法 1.from子句 2.select子句 3.聚集函数 4.多态查询 5.where子句 6.表达式 7.order by子句 8.group by子句 9.子查询语句 10.fetch关键字 11.命名查询

    HQL语句详解Select/update/deletefromwhere...

    Select/update/delete……from……where……groupby……having……orderby……asc/desc 其中的update/delete为Hibernate3中所新添加的功能,可见HQL查询非常类似于标准SQL查询。

    mysql学习笔记之完整的select语句用法实例详解

    本文实例讲述了mysql学习笔记之完整的select语句用法。...完整语法:select 去重选项 字段列表 [as 字段别名] from 数据源 [where子句] [group by 子句] [having子句] [order by 子句] [limit子句];

    精通SQL 结构化查询语言详解

    9.4.3 ORDER BY子句排序UNION运算结果  9.4.4 对多表进行UNION运算  9.4.5 UNION JOIN 连接表  9.5 表连接的其他应用及注意问题  9.5.1 连接表进行聚合运算  9.5.2 多表连接的综合运用  9.5.3 多表连接...

    mysql 字段as详解及实例代码

    在mysql中,select查询可以使用AS关键字为查询的字段起一个别名,该别名用作表达式的列名,并且别名可以在GROUP BY,ORDER BY或HAVING等语句中使用。例如: SELECT CONCAT(last_name,’, ‘,first_name) AS full_...

    【63课时完整版】大数据实践HIVE详解及实战

    19.Hive中order by、sort by、distribute by与cluster by的使用 20.Hive中分析函数与窗口函数 21.Hive中UDF的介绍 22.Hive中使用自定义UDF实现日期格式转换 23. HiveServer2的介绍及三种连接方式 24.Hive元数据、...

Global site tag (gtag.js) - Google Analytics