`
regedit_123
  • 浏览: 321239 次
  • 性别: 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 |
+----+-----------+---------+-------+

分享到:
评论

相关推荐

    group by的详解

    3. **排序顺序**:当同时使用`GROUP BY`、`HAVING`和`ORDER BY`时,`ORDER BY`通常放在最后。在示例中,`ORDER BY p.name`确保结果按供应商名字排序,而Oracle会默认按照`GROUP BY`中的列顺序进行排序,即先按年份、...

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

    在MySQL中,`COUNT()`, `GROUP BY`, 和 `ORDER BY` 是三个非常重要的SQL语句组成部分,它们各自承担着不同的职责,同时也常被结合在一起使用以满足复杂的数据查询需求。 `COUNT()` 是一个聚合函数,它用于计算指定...

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

    MySQL中的`ORDER BY`和`GROUP BY`是SQL查询中两个关键的子句,它们用于对查询结果进行排序和分组。然而,在某些情况下,MySQL可能会使用`Using filesort`来完成这些操作,这通常会导致性能下降。本文将深入探讨`...

    Linq Grouping GroupBy 用法详解

    `GroupBy`方法可以与其他LINQ操作,如`OrderBy`和`Where`结合使用,实现更复杂的查询: ```csharp var topStudents = students .GroupBy(s => s.Class) .OrderByDescending(g => g.Average(s => s.Grade)) .Take...

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

    本文将详细介绍WHERE、GROUP BY、HAVING、ORDER BY的执行顺序和编写顺序,以及它们之间的关系。 一、WHERE子句的执行顺序 WHERE子句的执行顺序是先对全表数据进行筛选,返回第一个结果集。WHERE子句的作用是过滤...

    order_by_、group_by_、having的用法区别.doc

    #### 二、ORDER BY详解 **1. 定义与作用** - `ORDER BY` 子句用于对查询结果进行排序。 - 默认情况下,`ORDER BY` 对结果集按升序(ASC)排序。如果需要降序排序,则需要添加 `DESC` 关键字。 - 可以对单个或多...

    详解partition by和group by对比

    在SQL查询中,`GROUP BY` 和 `PARTITION BY` 都是用来处理数据分组的,但它们在功能和使用场景上有所不同。首先,`GROUP BY` 是一个基础的分组函数,它根据指定的列将数据进行分组,并且通常与聚合函数如 `SUM`, `...

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

    在SQL查询中,`GROUP BY`,`HAVING`,和`ORDER BY`是三个非常重要的子句,它们分别用于数据的分组、过滤和排序。下面是对这三个概念的详细解释。 1. `GROUP BY` 子句: `GROUP BY` 用于将数据根据指定的一个或多个...

    详解SQL中Group By的使用教程

    3. **`GROUP BY`与`ORDER BY`** `ORDER BY`用于对查询结果进行排序。当与`GROUP BY`一起使用时,`ORDER BY`会按照聚合函数的结果进行排序,如示例2所示。在某些数据库系统中,如SQL Server,可以直接在`ORDER BY`中...

    group by 语法大全,内附列子

    ### Group By 语法详解与应用实例 在数据库查询语言SQL中,`GROUP BY`语句是一种非常强大的工具,它能够帮助我们对数据进行分组处理,以便更好地进行数据分析和汇总。下面将详细介绍`GROUP BY`的基本语法、常用场景...

    Oracle中分组查询group by用法规则详解

    `GROUP BY`是Oracle SQL中用于数据分组的关键语句,常与聚合函数、`HAVING`子句和`ORDER BY`子句一起使用,提供了一种强大方式来分析和汇总数据库中的大量数据。了解并熟练掌握这些用法对于进行复杂的数据分析至关...

    详解SQL中Group By的用法

    在SQL中,`GROUP BY`语句是数据分析和报表生成的核心工具之一,它允许我们根据一个或多个列的值对数据进行分组,并且通常与聚合函数一起使用,以对每个组进行计算。以下是关于`GROUP BY`用法的详细说明: 1. **基本...

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

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

    Django框架models使用group by详解

    总结来说,Django的ORM提供了强大的查询功能,通过`filter`, `values`, `annotate`, `order_by`等方法,可以轻松地完成复杂的数据查询和分组统计,同时保持代码的可读性和简洁性。理解并熟练运用这些方法,对于开发...

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

    例如,如果我们有一个包含多个分类(`corp_name`)和提交时间(`submit_time`)的数据表,要查询每个分类的最新记录,`GROUP BY` 无法直接实现,因为我们需要的是每个分类的第一条记录,而不是每组的聚合值。...

Global site tag (gtag.js) - Google Analytics