mysql 分组查询教程

1.分组

  分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

2.分组的特点

  1.)group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组

  2.)group by可用于单个字段分组,也可用于多个字段分组

3 分组的用法

select 字段名 from 数据表 group by 分组字段名

4 使用分组时相当于把某个字段按照某个要求叠在了一起,这时候使用普通的方法无法查看每个组的内容,需要group_concat(分组的字段名)来查询

select 分组字段名 group_concat(字段名) from 数据表 group by 分组字段名

5.当你需要某些需求的查询,需要为分组查询添加一个限制条件,这时候不能使用where进行条件筛选,应该使用having进行条件筛选

select gender,count(*) from students group by gender having count(*)>2;

  

 

6.当你需要对数据表的分组进行汇总的,可以使用 with rollup 方法(当不配合分组使用时默认对全数据表进行汇总)

select gender,count(*) from students group by gender with rollup;

总结:

  1. group by 关键字能根据1个或多个字段对数据进行分组
  2. group_concat函数作用就是将每个分组中的每个成员的指定个字段拼接在一行中显示
  3. 聚合函数在和 group by 结合使用时, 统计的对象是每个分组
  4. having 是对分组结果进行条件过滤
  5. with rollup在分组结果最后新增一行完成汇总显示。

原文地址:https://www.cnblogs.com/xuchuankun/p/9477453.html

时间: 2024-07-28 19:35:50

mysql 分组查询教程的相关文章

Oracle和MySQL分组查询GROUP BY

Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段必须在GROUP BY后边出现,否则会报错:“ORA-00979: not a GROUP BY expression”.而MySQL则不同,如果SELECT出来的字段在GROUP BY后面没有出现,那么会随机取出一个值,而这样查询出来的数据不准确,语义也不明确.所以,作者建议在写SQL语句的时候,

Mysql 分组查询出现'this is incompatible with sql_mode=only_full_group_by'的解决办法

由于Mysql自动开启了 only_full_group_by,所以若查询的字段不在group by里面,则分组报错. 解决办法其一:mysql配置,关闭only_full_group_by,这种办法自行百度 下面说第二种办法: 除去group_by 以外的参数加上any_value(*) 如:SELECT type_id,any_value(`name`)  FROM ts_product GROUP BY type_id; Mysql 分组查询出现'this is incompatible

mysql分组查询时,讲多个值合并在一行显示

mysql根据字段进行分组查询时,相同字段的数据,只会显示一个,如果要想让这个字段的所有数据,显示在一行里,可以在查询时用GROUP_CONTAT函数,默认数据合并以逗号,分开

mysql 分组查询问题 group_concat

这几天在做购物车的时候.购物车内的商品为一个商品占一行,结果再从数据库读出的时候,没有分组,而是循环所有的内容出来,然后进行判断.如果一样的话就把他保存到一个变量中.但是自己逻辑没搞清楚.一直出bug. 偶然间想起了 sql语句中分组查询.突然才明白 就是进行分组查询.按照店铺分组 然后里边的详细商品用 group_concat函数进行组合 select 店铺ID,group_concat(shangPinID) shangPinIDs  from 购物车 group by 店铺ID 其中 sh

MySQL分组查询每组最新的一条数据

开发中经常会遇到,分组查询最新数据的问题,比如下面这张表(查询每个地址最新的一条记录): sql如下: -- ---------------------------- -- Table structure for test -- ---------------------------- DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10

三、mysql分组查询

功能:使用group by子句将表中的数据分成若干组 语法: SELECT column,group_function(column) FROM table [WHERE  condition] #分组前的筛选 [GROUP BY   group_by_expression] [having condition]  # 分组后的筛选 [ORDER BY   column]; 特点: 1) 分组查询中的筛选条件分为两类 数据源 位置 关键字 分组前筛选 原始表 Group by 子句的前面 whe

mysql 分组查询数据

今天项目BOSS提了个sql语句需求,我听得稀里糊涂,没办法,一步步讨论.实践,最终搞定. 先上建表语句: 1 /* 2 Navicat MySQL Data Transfer 3 4 Source Server : localhost_3306 5 Source Server Version : 50623 6 Source Host : localhost:3306 7 Source Database : demo 8 9 Target Server Type : MYSQL 10 Targ

mysql分组查询前n条数据

建表: CREATE TABLE hard(id INT,aa varchar(50) ,bb INT,PRIMARY key(id))insert into hard values(1,'a',9)insert into hard values(2,'a',7)insert into hard values(3,'a',8)insert into hard values(4,'a',6) insert into hard values(5,'b',2)insert into hard valu

Mysql 分组查询最高分

今天告诉我要写一个服务,目的是按照每个班中各分组中竞赛最高分组平分小组得分给各个成员的服务,于是就有两个技术需求 1 查询每个班的冠军团队 2 增加一组人的分数 从“1”中,查出每个班N个分组中的得分冠军团队,然后根据这个团队小组人数,把团队得分平均分成N份,用方法“2”更新该组人的分数. 上查询代码! 1 有可能有更好的方法,我在网上参考了这篇文章, http://www.jb51.net/article/31590.htm 选择了方法4中的 Inner JOIN,当然有一个班中两组平分儿和分