`

MySQL分组数据group by

阅读更多
1. 分组数据

分组计数
SQL> select vend_id, count(*) as num_prods from products group by vend_id;

rollup关键字
SQL> select vend_id, count(*) as num_prods from products group by vend_id with rollup;

having过滤分组
SQL> select cust_id, count(*) as orders from orders group by cust_id having count(*) >= 2;

混合过滤分组
SQL> select vend_id, count(*) as num_prods from products where prod_price >= 10 group by vend_id having count(*) >= 2;

SQL> select vend_id, count(*) as num_prods from products group by vend_id having count(*) >= 2;

分组和排序
SQL> select order_num, sum(quantity*item_price) as ordertotal from orderitems group by order_num having sum(quantity*item_price) >= 50;
SQL> select order_num, sum(quantity*item_price) as ordertotal from orderitems group by order_num having sum(quantity*item_price) >= 50 order by ordertotal;

1. group by 对数据进行分组
    建立分组时,指定的所有列都一起计算,不能从个别的列取回数据;
    除聚集计算语句外,select语句中的每个列都必须在group by子句中给出;
    分组列中有null值,则null将作为一个分组返回,如果列中有多行null,将他们分为一组;
2. group by子句必须出现在where子句之后,order by子句之前
3. 使用with rollup关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值
4. having关键字可以过滤分组
    having子句放在group by后面
    having和where语法基本相同
    having在数据分组后进行过滤,where在数据分组前进行过滤
5. group by与order by
    1) group by分组行,但输出可能不是分组的顺序
       order by排序产生的输出
    2) group by只能使用选择列或者表达式列,而且必须使用每个选择列表达式
       order by任意列都可以使用(甚至非选择的列也可以使用)
    3) group by如果与聚集函数一起使用列(或表达式),则必须使用
       order by不一定需要
6. select子句顺序
    子句         说明                   是否必要使用
    select       要返回的列或表达式     是
    from         从中检索数据的表       仅在从表选择数据时使用
    where        行级过滤               否
    group by     分组说明               仅在按组计算聚集时使用
    having       组级过滤               否
    order by     输出排序顺序           否
    limit        要检索的行数           否
分享到:
评论

相关推荐

    mysql分组取每组前几条记录(排名) 附group by与order by的研究

    –按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: nameval memo a 2 a2(a的第二个值) a 1 a1–a的第一个值 a 3 a3:a的第三个值 b 1 b1–b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b ...

    Mysql利用group by分组排序

    首先先按某个字段进行order by,然后把有顺序的表进行分组,这样每组的成员都是有顺序的,而mysql默认取得分组的第一行。从而得到每组的最值。 select id, (@rowno := @rowno + 1) as rank, score, (C.end_ti

    mysql使用GROUP BY分组实现取前N条记录的方法

    主要介绍了mysql使用GROUP BY分组实现取前N条记录的方法,结合实例形式较为详细的分析了mysql中GROUP BY分组的相关使用技巧,需要的朋友可以参考下

    mysql获取group by总记录行数的方法

    一般来说,mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数。 mysql中可以使用SQL_CALC_FOUND_ROWS来获取查询的行数,在很多分页的程序中都这样写: 代码如下:SELECT COUNT(*) ...

    处理group by 查询速度太慢的问题 数据量大.doc

    实际项目中因表数据量大,发现查询速度很慢。记录此次排查和优化过程。希望对阅读到此文章的朋友有所帮助。

    Mysql取分组后的每组第一条数据

    因为在mysql分组是将第一个出现的数据进行展示出。 MySQL会创建临时表的几种情况: 1、UNION查询; 2、用到TEMPTABLE算法或者是UNION查询中的视图; 3、ORDER BY和GROUP BY的子句不一样时; 4、表连接中,ORDER BY...

    基于mysql实现group by取各分组最新一条数据

    前言: group by函数后取到的是分组中的第一条数据,但是我们有时候需要取出各分组的最新一条,该怎么实现呢? 本文提供两种实现方式。 一、准备数据 ... 二、三种实现方式 1)先order by之后再分组: ...

    mysql获取group by的总记录行数另类方法

    mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数。 mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写: 代码如下 SELECT COUNT(*) from `table` ...

    MySQL优化GROUP BY方案

    满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有)。在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建...

    MySql Group By对多个字段进行分组的实现方法

    在平时的开发任务中我们经常会用到MYSQL的GROUP BY分组, 用来获取数据表中以分组字段为依据的统计数据。比如有一个学生选课表,表结构如下: Table: Subject_Selection Subject Semester Attendee ---------------...

    mysql中order by与group by的区别

    order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是... 您可能感兴趣的文章:sql中 order by 和 group by的区别深度分析mysql GROUP BY 与 ORDER BYgroup by,having,o

    MySQL根据某一个或者多个字段查找重复数据的sql语句

    sql 查出一张表中重复...2、查询出所有数据进行分组之后,和重复数据的重复次数的查询数据,先列下: select count(username) as '重复次数',username from xi group by username having count(*)>1 order by userna

    MySQL DQL - 分组查询.md

    示例代码演示了使用`GROUP BY`关键字将数据按照指定的列进行分组,并配合使用聚合函数进行统计计算。您可以根据需要选择适当的列名来进行分组,然后使用合适的聚合函数计算每个分组的统计结果。 通过阅读和实践这个...

    MySQL 分组查询和聚合函数

    这个时候就要用到分组查询,分组查询的目的是为了把数据分成多个逻辑组(购买化妆品的人员是一个组,不同年龄段购买化妆品的人员也是组),并对每个组进行聚合计算的过程:。 分组查询的语法格式如下: select ...

    mysql只返回时间的时分秒,并且根据小时分组

    下面用group by分组如果遇到这个错误: this is incompatible with sql_mode=only_full_group_by 那么在此执行这两句 select @@global.sql_mode; set sql_mode = (SELECT REPLACE(@@sql_mode, ‘ONLY_FULL_GROUP_BY...

    Mysql-DQL(分组查询)

    进阶5:分组查询 语法: select 查询列表 from 表 【where 筛选条件】 group by 分组的字段 ...group by 子句支持单个字段分组,多个字段分组、函数、表达式、可以接排序放在最后 分组函数: count sum max

    mysql group by 对多个字段进行分组操作

    在平时的开发任务中我们经常会用到MYSQL的GROUP BY分组, 用来获取数据表中以分组字段为依据的统计数据。 比如有一个学生选课表,表结构如下: Table: Subject_Selection Subject Semester Attendee ——————...

    mysql group by having 实例代码

    mysql中group by语句用于分组查询,可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表, 经常和having一起使用,需要的朋友可以参考下

    mysql group_concat 实现把分组字段写成一行的方法示例

    本文实例讲述了mysql group_concat 实现把分组字段写成一行的方法。分享给大家供大家参考,具体如下: 功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。 函数语法: group_concat( [DISTINCT]...

Global site tag (gtag.js) - Google Analytics