当前位置:  开发笔记 > 后端 > 正文

使用GROUP BY查询获取行数

如何解决《使用GROUPBY查询获取行数》经验,为你挑选了4个好方法。

我有一个查询的效果

SELECT t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
LIMIT 10,20

我想知道很多总行,这个查询将返回没有LIMIT(所以我可以显示分页信息).

通常,我会使用此查询:

SELECT COUNT(t3.id) FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id

但是,GROUP BY更改了COUNT的含义,而是获得了一组行,表示每个组中唯一的t3.id值的数量.

当我使用GROUP BY时,有没有办法计算总行数?我想避免执行整个查询并只计算行数,因为我只需要行的子集,因为值是分页的.我正在使用MySQL 5,但我认为这非常通用.



1> Sylvain..:

MySQL中有一个很好的解决方案.

在关键字SELECT之后添加关键字SQL_CALC_FOUND_ROWS:

SELECT SQL_CALC_FOUND_ROWS t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
LIMIT 10,20

之后,使用函数FOUND_ROWS()运行另一个查询:

SELECT FOUND_ROWS();

它应返回没有LIMIT子句的行数.

有关更多信息,请访问此页面:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows


由于免责声明我自己没有对调用进行基准测试,因此本文将我从解决方案中解脱出来:http://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

2> Tom H..:

"一堆其他东西"都聚集在一起吗?我假设是因为你的GROUP BY只有t3.id. 如果是这种情况那么这应该工作:

SELECT
     COUNT(DISTINCT t3.id)
FROM...

另一种选择当然是:

SELECT
     COUNT(*)
FROM
     (
     
     ) AS SQ

我不使用MySQL,所以我不知道这些查询是否可以在那里工作.


在MySQL中,这将是错误,但如果为生成的表添加别名,它可能是一个好的解决方案.否则你会收到错误:"每个派生表必须有自己的别名".所以一定要写一下:从(你的查询)中选择count(*)作为resultTable

3> Silver Moon..:

使用子查询:

SELECT COUNT(*) FROM    
(
SELECT t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
)    
as temp;

所以temp包含行数.



4> Bill Karwin..:

您正在使用MySQL,因此您可以使用它们的功能来完成此操作.

SELECT SQL_CALC_FOUND_ROWS t3.id, a,bunch,of,other,stuff 
FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
LIMIT 10,20;

SELECT FOUND_ROWS(); -- for most recent query

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有