MySQL Group By 数据分组-- 陷阱

GROUP BY

MySQL中 使用 GROUP BY 关键字用于对某个或某些字段查询分组,并返回重复记录的第一条。

语法:

SELECT column,... FROM tb_name GROUP BY column1,column2 ...

user 表记录如下:

uid username
1 小李
2 小张
3 小李
4 小王
5 小李
6 小张

对上面的 user 表做查询如下:

SELECT * FROM user GROUP BY username

返回查询结果如下:

uid username
1 小李
2 小张
3 小王

说明

GROUP BY 语法在 MySQL 数据库中的用法与其他数据库相差较大。对于标准 SQL 而言,GROUP BY 一定要结合聚合函数使用,而且选择的字段除了聚合函数外,还必须在 GROUP BY 中出现。但是在 MySQL 中扩展了 GROUP BY 的功能:

  • 不加聚合函数的情况下,返回的结果是 GROUP BY 结果集中第一行,如上面例子所示。
  • GROUP BY 结合聚合函数的时候,选择的字段不必在 GROUP BY 中存在,MySQL 具有隐含字段的功能。

所以我们可以根据 MySQL 对 GROUP BY 的扩展特性,结合另外一些关键字如 ORDER BY 等,方便的得到想要的查询结果。

例子 2:

SELECT * FROM user GROUP BY username,uid

返回查询结果如下:

uid username
1 小李
3 小李
5 小李
2 小张
6 小张
4 小王

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 23:16:05

MySQL Group By 数据分组-- 陷阱的相关文章

【MySql】Group By数据分组

GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. 因为聚合函数通过作用于一组数据而只返回一个单个值, 因此,在SELECT语句中出现的元素要么为一个聚合函数的输入值, 要么为GROUP BY语句的参数,否则会出错反, 原文地址:https://www.cnblogs.com/zyber/p/9580583.html

MySQL group by 单字分组序和多字段分组

我这里创建了一个 goods 表,先看下里面的数据: mysql> select * from goods; +----+------+------+------------+-------------+------------+ | id | s_id | b_id | goods_name | goods_price | goods_desc | +----+------+------+------------+-------------+------------+ |  1 |    1 

Mysql 数据分组取某字段值所有最大的记录行

需求: 表中同一个uid(用户)拥有多条游戏等级记录,现需要取所有用户最高等级(level)的那一条数据,且时间(time)越早排越前.这是典型的排名表 +------+-------+--------------+---------------------+ | uid | level | role | time | +------+-------+--------------+---------------------+ | 7 | 1 | 摇滚圣魔 | 2014-06-12 15:01:0

MySQL GROUP BY 分组语句:语法及案例剖析、使用 WITH ROLLUP

MySQL GROUP BY 语句 GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name; 实例演示 本章节实例使用到了以下表结构及数据,使用前我们可以先将以下数据导入数据库中.

关于MYSQL group by 分组按时间取最大值的实现方法!

类如 有一个帖子的回复表,posts( id , tid , subject , message , dateline ) , id 为 自动增长字段, tid为该回复的主题帖子的id(外键关联), subject 为回复标题, message 为回复内容, dateline 为回复时间,用UNIX 时间戳表示, 现在要求 选出 前十个来自不同主题的最新回复 SELECT * FROM posts GROUP BY tid LIMIT 10 这样一个sql语句选出来的并非你想要的 最新的回复,而

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

mysql group by 对多个字段进行分组 group by X 意思是将所有具有相同X字段值的记录放到一个分组里. 那么group by  X, Y呢? group by X, Y意思是将所有具有相同X字段值和Y字段值的记录放到一个分组里. 原文地址:https://www.cnblogs.com/beiyi888/p/9623257.html

Mysql group by top N的问题

在日常工作中,经常要查询分组的前几名.oracle中可以通过row_num来支持查询,mysql暂时不支持row_num.那么如何来完成这个需求呢? 例如: 表中的数据: +--------+-------+-----+ | Person | Group | Age | +--------+-------+-----+ | Bob | 1 | 32 | | Jill | 1 | 34 | | Shawn | 1 | 42 | | Jake | 2 | 29 | | Paul | 2 | 36 |

MySQL之三:数据操作

一.MYSQL数据操作(增 改 删) 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3-字段n) VALUES(值1,值2,值3-值n); 语法二: INSERT INTO 表名 VALUES (值1,值2,值3-值n); 2. 指定字段插入数据 语法: INSERT INTO 表名(字段1,字段2,字段3-) VALUES (值1,值2,值3-); 3. 插入多条记录 语法: INSERT INTO 表名 VALUES (值1,值2,值3-值n),

mysql group by 用法解析(详细)

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值.其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而 这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的.所以我花了很多时间来研究这个问题,网上也查不到解决方案 下面先来看看例子: