`
fantaxy025025
  • 浏览: 1329741 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

MySQL_使用group_distinct后_如何得到总记录数(行数)

 
阅读更多

 

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】优化之MySQL官方文档翻译

    当`DISTINCT`与`LIMIT row_count`结合使用时,MySQL会尝试尽快返回满足条件的`row_count`条唯一记录。这意味着一旦MySQL找到了所需的`row_count`条记录,它就会停止进一步的查询处理,从而节省计算资源。 此外,...

    分析MySQL中优化distinct的技巧

    MySQL的优化器将`DISTINCT`操作转换为`GROUP BY`,使得查询在利用索引分组后,仅扫描一次所需的`nick`值。在新的执行计划中,`Using index for group-by`表明查询利用索引完成了分组操作,从而提高了效率。 通过...

    MySQL中distinct与group by语句的一些比较及用法讲解

    在MySQL数据库中,`DISTINCT` 和 `GROUP BY` 是两种用于数据去重和分组统计的SQL语句,它们虽然都可以帮助我们处理重复数据,但有着不同的应用场景和执行机制。 1. `DISTINCT` 关键字: - `DISTINCT` 主要用于去除...

    使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT

    总的来说,`GROUP BY`配合`COUNT(*)`用于统计每个组的记录数,而`COUNT(DISTINCT column)`则用于计算不重复的值。在使用`COUNT(DISTINCT)`时,务必注意其性能影响,特别是在处理多列时。在实际应用中,应根据具体...

    MySQL中distinct和count(*)的使用方法比较

    对于 `GROUP_CONCAT` 函数,它在 MySQL 4.1 及更高版本中可用,可以将多列的不重复值组合为一个字符串,但请注意,这将不再返回单个记录,而是组合后的结果。 其次,`COUNT(*)` 用于统计表中的行数。这个函数对全表...

    MySql_Select_Test_Demo:练习使用mysql查询语句 50题

    `PL/SQL`,虽然在标签中提及,通常与Oracle数据库相关,但在MySQL中,我们主要使用的是SQL(Structured Query Language),它是用于管理和操作数据库的标准语言。在这个“MySQL_Select_Test_Demo”练习中,我们将...

    2023-MySQL面试必备25题及答案

    使用`SELECT COUNT(column_name)`可以得到指定列的行数。例如,`SELECT COUNT(user_id) FROM users;`会返回users表中user_id列的不重复行数。 2. **MySQL查询的大小写敏感性**: MySQL默认在查询中不区分大小写,...

    mysql组函数相关001

    MySQL是一种广泛使用的开源关系型数据库管理系统,其在处理大量数据时,组函数是不可或缺的工具。组函数,也称为聚合函数,允许我们对一组值进行操作,而不是单个值,从而得出汇总信息。本篇文章将深入探讨MySQL中的...

    MySQL优化GROUP BY方案

    MySQL中的GROUP BY语句用于对数据进行分组并计算每个组的聚合函数,如COUNT(), SUM(), AVG(), MAX(), MIN()等。在处理大数据量时,优化GROUP BY语句至关重要,因为它直接影响到查询性能。本篇文章将深入探讨MySQL...

    MySQL性能分析之临时表

    - 当查询涉及到`GROUP BY`和`DISTINCT`时,如果`ORDER BY`和`GROUP BY`子句中的列不一致,或`ORDER BY`包含非第一个表中的列,则MySQL会创建一个临时表。 - 使用`SQL_SMALL_RESULT`选项时,MySQL倾向于使用内存中...

    mysql手册,学习mysql的资料

    MySQL是一种广泛使用的开源关系型数据库管理系统,其手册是学习和掌握MySQL知识的重要参考资料。本文将深入解析MySQL中的SELECT语句,这是SQL语言中最基础且功能强大的部分,用于从数据库中检索数据。 首先,SELECT...

    MYSQL高级特性.pdf

    - `GROUP BY`用于按指定列对结果集进行分组,而`HAVING`则用于过滤分组后的数据。例如,要统计每种动物的总数,并只显示总数大于1的动物: ```sql SELECT species, COUNT(*) AS count FROM pet GROUP BY species...

    Mysql10个常见查询汇总,全覆盖查询场景.zip

    4. **GROUP BY和HAVING**:GROUP BY用于将数据分组,HAVING用于在分组后筛选。例如,`SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > 1` 将找出column_name中有多个不同值的...

    mysql查询优化的若干

    - **DISTINCT 与 ORDER BY 的组合**:由于DISTINCT被转换成对所有列的GROUP BY,因此当与ORDER BY结合使用时,通常需要使用临时表。 - **索引覆盖查询**:如果查询条件中包含的所有列都存在于索引中,则MySQL可以...

    mysql之Linux安装,重点是索引的优化笔记

    ### MySQL之Linux安装与索引优化笔记 #### 一、MySQL简介及Linux版安装 **1. MySQL概述** MySQL是一种关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前属于Oracle公司。它是一种开源软件,因其性能...

    25.5 MySQL 聚合函数

    5. **GROUP BY**: GROUP BY 语句与聚合函数结合使用,用于按一个或多个列对结果集进行分组。这有助于我们对每个分组应用聚合函数。例如,`SELECT department, AVG(salary) FROM employees GROUP BY department` 将给...

Global site tag (gtag.js) - Google Analytics