`

mysql group by后面可以省略未分组的字段

 
阅读更多

引自:http://blog.csdn.net/wxwzy738/article/details/20636563

 

对于group by在mysql中的使用和Oracle的差异性很大,准确的说不光和Oracle和别的数据库差异性一样,这些有点不太遵循标准SQL。我们知道常规的 sql,对于group by来说一定要结合聚合函数,而且选择的字段除了聚合函数外,还必须在group by中出现,否则报错,但是在mysql中扩展了这样的功能
首先对于不加聚合函数的sql来说,它的功能结合了limit来得出结果,仔细想想的时候有点Oracle分析函数的味道,limit的时候得到的并不是 最大最小的值,而是某一下group by结果集中第一行,也就是刚才说的相当与先group by, 然后在每个group by下面进行limit 1。
其次,刚才还说了常规的group by结合聚合函数的时候,选择的字段除了聚合函数外,必须在group by中存在,但是在mysql中不是这样了,它具有隐含字段的功能,例如:

表数据:



 执行语句:

SELECT * FROM `tb_demo2` GROUP BY `name`

 结果:



 再次执行:

SELECT * FROM `tb_demo2` GROUP BY `name`,id

 

 

再次执行:

SELECT GROUP_CONCAT(id),name FROM `tb_demo2` GROUP BY `name`

 

 

用一条sql语句删除表中重复的数据,并保留一条:

select a.* FROM tb_demo2 a WHERE EXISTS (select 1 FROM tb_demo2 WHERE name = a.name GROUP BY name HAVING count(name) > 1) AND id NOT in(SELECT id FROM `tb_demo2` GROUP BY `name` HAVING count(name) >1)

 

  • 大小: 16 KB
  • 大小: 18.3 KB
  • 大小: 22.8 KB
  • 大小: 24.6 KB
分享到:
评论

相关推荐

    常用MySQL语句大全

    - 分组查询:`SELECT 字段名 FROM 表名称 GROUP BY 字段名;` - 联合查询:使用`UNION`操作符连接两个或多个`SELECT`语句。 6. **索引**: - 创建索引:`CREATE INDEX 索引名 ON 表名称 (字段名);` - 删除索引:...

    人大金仓数据库适配mysql

    - KingbaseES对 `GROUP BY` 语句的执行更为严格,仅允许选择聚合函数或分组字段。 示例: ```sql SELECT COUNT(*), name FROM test GROUP BY name; ``` 综上所述,从MySQL迁移到人大金仓KingbaseES的过程中,需要...

    韩忠康MySQL笔记

    在分组查询中,如果需要对分组后的数据排序,应该使用`GROUP BY`语句,而不是`ORDER BY`。 `LIMIT`关键字用于限制查询返回的记录数。它接受两个参数:`OFFSET`(偏移量,从0开始)和`ROW_COUNT`(要返回的记录数)...

    MySQL命令大全

    对于那些已经不用的用户应给予清除,权限过界的用户应及时回收权限,回收权限可以通过更新User表相应字段,也可以使用REVOKE操作。 下面给出本人从其它资料(www.cn-java.com)获得的对常用权限的解释: 全局管理...

    0.8 MySQL表高级连接

    其中,INNER JOIN 可以省略,效果与 SQL92 中的等值连接相同。 例如,查询员工名和部门名: ``` SELECT last_name, department_name FROM employees e INNER JOIN departments d ON e.department_id = d.department...

    MySQL使用select语句查询指定表中指定列(字段)的数据

    例如,可以使用`JOIN`来连接多个表,`GROUP BY`对数据进行分组,`HAVING`在分组后进行条件筛选,`UNION`用于合并多个`SELECT`语句的结果。 总的来说,`SELECT`语句是MySQL中最常用的命令之一,灵活地运用它可以高效...

    两种mysql递归tree查询效率-mysql递归tree

    - 修改MySQL配置文件`my.ini`(或等效的配置文件)中的`group_concat_max_len`值: ```sql group_concat_max_len=102400 ``` - 或者在MySQL命令行中临时设置: ```sql SET GLOBAL group_concat_max_len=...

    MySQL入门学习命令详解

    - **基本查询**:包括单表查询、多表查询、分组统计(GROUP BY, HAVING)和排序(ORDER BY)。 - **聚合函数**:如COUNT(), SUM(), AVG(), MAX(), MIN()用于计算总数、平均值、最大值和最小值。 - **联接查询**:...

    MySQL中常用命令整理【附命令列表】.doc

    - **查询结果分组**:`GROUP BY`子句 ```sql SELECT * FROM student GROUP BY score DESC; -- 按照分数分组,并且降序排列 ``` - **分组条件**:`HAVING`子句 ```sql SELECT * FROM student GROUP BY score ...

    mysql 操作语句手册 初学者学习资料

    你可以根据需求选择查询特定列,通过WHERE子句过滤数据,使用GROUP BY进行分组,HAVING来过滤分组后的结果,ORDER BY进行排序,以及LIMIT来限制返回的行数。 2. **数据插入**:INSERT INTO语句用于向表中插入新记录...

    Mysql语句大全总结

    如果省略字段列表,则必须按照字段顺序输入值。 - **插入部分数据** ```sql INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...); ``` 插入部分字段的值。 - **蠕虫复制** ```sql CREATE ...

    MySQL数据库工程师常见面试题

    - **GROUP BY**:当使用 GROUP BY 时,MySQL 需要根据指定的列对结果集进行分组,这可能涉及到对所有数据进行排序或创建临时表以便于分组计算。如果分组涉及大量数据,排序或临时表操作就会消耗大量的 CPU 和 I/O ...

    mysql修改语句

    SELECT * FROM F GROUP BY a, b, c, d HAVING COUNT(*) > 1; ``` 这个查询则找出所有在a、b、c、d组合上重复的行,通常用于发现数据冗余或错误。 ### 总结 通过上述分析,我们可以看到,无论是UPDATE还是SELECT语句...

    Mysql操作命令

    `SELECT`语句可以包含多个子句,如`WHERE`、`GROUP BY`、`ORDER BY`等,用于筛选和排序结果集。 **WHERE子句:** 用于定义选择标准,例如比较字段与常量值、字段与字段之间的关系等。 **示例:** ```sql -- 示例1: ...

    MYSQL基础命令使用

    此外,还可以使用更复杂的查询,如联接(JOIN)、聚合函数(GROUP BY)、排序(ORDER BY)和分页(LIMIT)等,以满足更复杂的数据处理需求。在实际开发中,MySQL还提供了事务处理、视图、存储过程等功能,以支持更...

    常用的Mysql数据库操作语句大全.doc

    - **分组**:`GROUP BY columnname` 对数据进行分组。 - **连接查询**:`JOIN` 用于合并多个表的数据。 - **子查询**:在查询语句中嵌套查询以满足更复杂的逻辑。 这些只是MySQL数据库操作的基础,实际上还有更...

    mysql详细学习笔记

    - **GROUP BY**:用于将数据按照一个或多个列进行分组,常与聚合函数一起使用。 - **HAVING**:与 `WHERE` 类似,但用于过滤 `GROUP BY` 孓作的结果。 **去重** - **DISTINCT**:用于返回不同的值,例如 `SELECT ...

    MySQL笔记之别名的使用

    7. **别名可以省略AS**:在MySQL中,为字段设置别名时,`AS` 关键字可以省略,如 `SELECT d_id department_id, d_name department_name FROM department;` 也是合法的。 通过合理地使用别名,我们可以极大地提升SQL...

Global site tag (gtag.js) - Google Analytics