引自: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)
相关推荐
- 分组查询:`SELECT 字段名 FROM 表名称 GROUP BY 字段名;` - 联合查询:使用`UNION`操作符连接两个或多个`SELECT`语句。 6. **索引**: - 创建索引:`CREATE INDEX 索引名 ON 表名称 (字段名);` - 删除索引:...
在分组查询中,如果需要对分组后的数据排序,应该使用`GROUP BY`语句,而不是`ORDER BY`。 `LIMIT`关键字用于限制查询返回的记录数。它接受两个参数:`OFFSET`(偏移量,从0开始)和`ROW_COUNT`(要返回的记录数)...
- KingbaseES对 `GROUP BY` 语句的执行更为严格,仅允许选择聚合函数或分组字段。 示例: ```sql SELECT COUNT(*), name FROM test GROUP BY name; ``` 综上所述,从MySQL迁移到人大金仓KingbaseES的过程中,需要...
对于那些已经不用的用户应给予清除,权限过界的用户应及时回收权限,回收权限可以通过更新User表相应字段,也可以使用REVOKE操作。 下面给出本人从其它资料(www.cn-java.com)获得的对常用权限的解释: 全局管理...
其中,INNER JOIN 可以省略,效果与 SQL92 中的等值连接相同。 例如,查询员工名和部门名: ``` SELECT last_name, department_name FROM employees e INNER JOIN departments d ON e.department_id = d.department...
例如,可以使用`JOIN`来连接多个表,`GROUP BY`对数据进行分组,`HAVING`在分组后进行条件筛选,`UNION`用于合并多个`SELECT`语句的结果。 总的来说,`SELECT`语句是MySQL中最常用的命令之一,灵活地运用它可以高效...
- 修改MySQL配置文件`my.ini`(或等效的配置文件)中的`group_concat_max_len`值: ```sql group_concat_max_len=102400 ``` - 或者在MySQL命令行中临时设置: ```sql SET GLOBAL group_concat_max_len=...
- **基本查询**:包括单表查询、多表查询、分组统计(GROUP BY, HAVING)和排序(ORDER BY)。 - **聚合函数**:如COUNT(), SUM(), AVG(), MAX(), MIN()用于计算总数、平均值、最大值和最小值。 - **联接查询**:...
- **查询结果分组**:`GROUP BY`子句 ```sql SELECT * FROM student GROUP BY score DESC; -- 按照分数分组,并且降序排列 ``` - **分组条件**:`HAVING`子句 ```sql SELECT * FROM student GROUP BY score ...
你可以根据需求选择查询特定列,通过WHERE子句过滤数据,使用GROUP BY进行分组,HAVING来过滤分组后的结果,ORDER BY进行排序,以及LIMIT来限制返回的行数。 2. **数据插入**:INSERT INTO语句用于向表中插入新记录...
如果省略字段列表,则必须按照字段顺序输入值。 - **插入部分数据** ```sql INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...); ``` 插入部分字段的值。 - **蠕虫复制** ```sql CREATE ...
- **GROUP BY**:当使用 GROUP BY 时,MySQL 需要根据指定的列对结果集进行分组,这可能涉及到对所有数据进行排序或创建临时表以便于分组计算。如果分组涉及大量数据,排序或临时表操作就会消耗大量的 CPU 和 I/O ...
SELECT * FROM F GROUP BY a, b, c, d HAVING COUNT(*) > 1; ``` 这个查询则找出所有在a、b、c、d组合上重复的行,通常用于发现数据冗余或错误。 ### 总结 通过上述分析,我们可以看到,无论是UPDATE还是SELECT语句...
1. **补全语句**: `SELECT vend_id, COUNT(*) FROM products WHERE prod_price >= 10 GROUP BY vend_id HAVING COUNT(*) >= 2;` - 这条语句的作用是从`products`表中筛选出`prod_price`大于等于10的产品,并按照`...
`SELECT`语句可以包含多个子句,如`WHERE`、`GROUP BY`、`ORDER BY`等,用于筛选和排序结果集。 **WHERE子句:** 用于定义选择标准,例如比较字段与常量值、字段与字段之间的关系等。 **示例:** ```sql -- 示例1: ...
此外,还可以使用更复杂的查询,如联接(JOIN)、聚合函数(GROUP BY)、排序(ORDER BY)和分页(LIMIT)等,以满足更复杂的数据处理需求。在实际开发中,MySQL还提供了事务处理、视图、存储过程等功能,以支持更...
- **分组**:`GROUP BY columnname` 对数据进行分组。 - **连接查询**:`JOIN` 用于合并多个表的数据。 - **子查询**:在查询语句中嵌套查询以满足更复杂的逻辑。 这些只是MySQL数据库操作的基础,实际上还有更...
- **GROUP BY**:用于将数据按照一个或多个列进行分组,常与聚合函数一起使用。 - **HAVING**:与 `WHERE` 类似,但用于过滤 `GROUP BY` 孓作的结果。 **去重** - **DISTINCT**:用于返回不同的值,例如 `SELECT ...