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====
+
+
+
=
+
+
+
分享到:
相关推荐
MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及一个...
有这样的一个需求:select count(distinct nick) from user_access_xx_xx; 这条sql用于统计用户访问的uv,由于单表的数据量在10G以上,即使在user_access_xx_xx上加上nick的索引, 通过查看执行计划,也为全索引扫描...
单纯的去重操作使用distinct,速度是快于group by的。 distinct支持单列、多列的去重方式。 单列去重的方式简明易懂,即相同值只保留1个。 多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都...
用Distinct在MySQL中查询多条不重复记录值,绝对的物有所值
关于group by 与distinct 性能对比:网上结论如下,不走索引少量数据distinct性能更好,大数据量group by 性能好,走索引group by性能好。走索引时分组种类少distinct快。关于网上的结论做一次验证。 准备阶段屏蔽...
【DISTINCT】优化之MySQL官方文档翻译
下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错,然后又把它移除了。 一旦开启 only_full_group_by ,感觉,group by 将变成和 ...
DISTINCT 实际上和 GROUP BY 操作的实现非常相似,只不过是在 GROUP BY 之后的每组中只取出一条记录而已。所以,DISTINCT 的实现和 GROUP BY 的实现也基本差不多,没有太大的区别。同样可以通过松散索引扫描或者是...
主要介绍了oracle中使用group by优化distinct的相关资料,需要的朋友可以参考下
主要介绍了MongoDB教程之聚合,MongoDB除了基本的查询功能之外,还提供了强大的聚合功能,这里主要介绍count、distinct和group,需要的朋友可以参考下
mysql中distinct用法【SQL中distinct的用法】.docx
3、--查询所有同学的学号、姓名、选课数、总成绩; select Student.S#,Student.Sname,count(SC.C#),sum(score) from Student left Outer join SC on Student.S#=SC.S# group by Student.S#,Sname 4、--查询姓...
本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) 。 MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] ...
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...
语法: GROUP_CONCAT([DISTINCT] expr [,expr …][ORDER BY {unsigned_integer | col_name | expr}[ASC | DESC] [,col_name …]][SEPARATOR str_val]) 下面演示一下这个函数,先建立一个学生选课表...
group bydistinct 查询多表时,left join 还有效,全连接无效,在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不...
总计COUNT_DISTINCT 此扩展提供了COUNT(DISTINCT ...)的替代方法,该方法对于大量数据通常会以排序和不良性能而告终。 职能 有两个多态聚合函数,用于处理按值传递的固定长度数据类型(即,在64位计算机上最多为...
主要介绍了MySQL中distinct与group by的一些比较及用法讲解,二者在查询操作中的用法有很多相似之处,需要的朋友可以参考下
MySQL Distinct 去掉查询结果重复记录 DISTINCT 使用 DISTINCT 关键字可以去掉查询中某个字段的重复记录。 语法: SELECT DISTINCT(column) FROM tb_name 例子: 假定 user 表有如下记录: uid username 1 小李...