MySQL_使用group_distinct后_如何得到总记录数(行数)
问题: 使用了group或者distinct等后,如何得到查询结果的总记录数? --要求,不使用子查询
分析:
如果没有group,count(*) 就可以了。
但是,使用了就不同了。数据库里使用统计函数,针对的是group。
这个时候,如何得到查询结果记录总数,是个问题。
可行性分析:
这个问题有解么?如果不可能的事情,就别搞了,例如永动机,3等分等问题。
在mysql的终端查询结果:
mysql> select tag_id from labels where 1 = 1 group by tag_id;
+--------+
| tag_id |
+--------+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 6 |
| 9 |
| 11 |
| 22 |
| 54 |
+--------+
10 rows in set (0.00 sec)
最后居然有个数:10 rows
既然终端都有了,那应该有个地方存储。(推测mysql不会自己去再查一次,因为自己就握有结果)
解决方案: 使用found_rows函数
mysql> select found_rows();
+--------------+
| found_rows() |
+--------------+
| 10 |
+--------------+
1 row in set (0.00 sec)
附:这种方法和子查询一致!
select count(distinct tag_id) from labels where 1=1;
可能问题:
在多线程的情况下,会有问题么。
Java中,多个线程共同持有一个connection时,会发生问题。
t1查询select tag_id from labels where 1 = 1 group by tag_id;
t2查询别的
t1查询select found_rows();
这样得到的是t2的查询结果。
在Hibernate等线程池的情况下,每个线程会一直持有当前的connection直到线程结束。
这样的话,每个线程的connection是不同的,不会发生冲突。
但必须保证两个语句之间别有别的查询sql执行。
其他:
ROW_COUNT()可以查看上次update操作影响的行数。
====END====
+
+
+
=
+
+
+
分享到:
相关推荐
当`DISTINCT`与`LIMIT row_count`结合使用时,MySQL会尝试尽快返回满足条件的`row_count`条唯一记录。这意味着一旦MySQL找到了所需的`row_count`条记录,它就会停止进一步的查询处理,从而节省计算资源。 此外,...
MySQL的优化器将`DISTINCT`操作转换为`GROUP BY`,使得查询在利用索引分组后,仅扫描一次所需的`nick`值。在新的执行计划中,`Using index for group-by`表明查询利用索引完成了分组操作,从而提高了效率。 通过...
在MySQL数据库中,`DISTINCT` 和 `GROUP BY` 是两种用于数据去重和分组统计的SQL语句,它们虽然都可以帮助我们处理重复数据,但有着不同的应用场景和执行机制。 1. `DISTINCT` 关键字: - `DISTINCT` 主要用于去除...
总的来说,`GROUP BY`配合`COUNT(*)`用于统计每个组的记录数,而`COUNT(DISTINCT column)`则用于计算不重复的值。在使用`COUNT(DISTINCT)`时,务必注意其性能影响,特别是在处理多列时。在实际应用中,应根据具体...
对于 `GROUP_CONCAT` 函数,它在 MySQL 4.1 及更高版本中可用,可以将多列的不重复值组合为一个字符串,但请注意,这将不再返回单个记录,而是组合后的结果。 其次,`COUNT(*)` 用于统计表中的行数。这个函数对全表...
`PL/SQL`,虽然在标签中提及,通常与Oracle数据库相关,但在MySQL中,我们主要使用的是SQL(Structured Query Language),它是用于管理和操作数据库的标准语言。在这个“MySQL_Select_Test_Demo”练习中,我们将...
使用`SELECT COUNT(column_name)`可以得到指定列的行数。例如,`SELECT COUNT(user_id) FROM users;`会返回users表中user_id列的不重复行数。 2. **MySQL查询的大小写敏感性**: MySQL默认在查询中不区分大小写,...
MySQL是一种广泛使用的开源关系型数据库管理系统,其在处理大量数据时,组函数是不可或缺的工具。组函数,也称为聚合函数,允许我们对一组值进行操作,而不是单个值,从而得出汇总信息。本篇文章将深入探讨MySQL中的...
MySQL中的GROUP BY语句用于对数据进行分组并计算每个组的聚合函数,如COUNT(), SUM(), AVG(), MAX(), MIN()等。在处理大数据量时,优化GROUP BY语句至关重要,因为它直接影响到查询性能。本篇文章将深入探讨MySQL...
- 当查询涉及到`GROUP BY`和`DISTINCT`时,如果`ORDER BY`和`GROUP BY`子句中的列不一致,或`ORDER BY`包含非第一个表中的列,则MySQL会创建一个临时表。 - 使用`SQL_SMALL_RESULT`选项时,MySQL倾向于使用内存中...
MySQL是一种广泛使用的开源关系型数据库管理系统,其手册是学习和掌握MySQL知识的重要参考资料。本文将深入解析MySQL中的SELECT语句,这是SQL语言中最基础且功能强大的部分,用于从数据库中检索数据。 首先,SELECT...
4. **GROUP BY和HAVING**:GROUP BY用于将数据分组,HAVING用于在分组后筛选。例如,`SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > 1` 将找出column_name中有多个不同值的...
- **DISTINCT 与 ORDER BY 的组合**:由于DISTINCT被转换成对所有列的GROUP BY,因此当与ORDER BY结合使用时,通常需要使用临时表。 - **索引覆盖查询**:如果查询条件中包含的所有列都存在于索引中,则MySQL可以...
### MySQL之Linux安装与索引优化笔记 #### 一、MySQL简介及Linux版安装 **1. MySQL概述** MySQL是一种关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前属于Oracle公司。它是一种开源软件,因其性能...
5. **GROUP BY**: GROUP BY 语句与聚合函数结合使用,用于按一个或多个列对结果集进行分组。这有助于我们对每个分组应用聚合函数。例如,`SELECT department, AVG(salary) FROM employees GROUP BY department` 将给...