首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用GROUP BY查询获取行数

使用GROUP BY查询获取行数
EN

Stack Overflow用户
提问于 2008-12-13 04:14:16
回答 5查看 93.6K关注 0票数 59

我对…有一个疑问。

代码语言:javascript
复制
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

我想知道这个查询返回的总行数没有限制(这样我就可以显示分页信息)。

通常,我会使用以下查询:

代码语言:javascript
复制
SELECT COUNT(t3.id) FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id

然而,group BY改变了计数的含义,取而代之的是,我得到了一组表示每个组中唯一t3.id值的行数。

当我使用GROUP BY时,有没有办法获得总行的计数?我希望避免执行整个查询并只计算行数,因为我只需要行的一个子集,因为值是分页的。我使用的是MySQL 5,但我认为这很通用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-12-13 04:26:57

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

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

代码语言:javascript
复制
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()运行另一个查询:

代码语言:javascript
复制
SELECT FOUND_ROWS();

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

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

票数 53
EN

Stack Overflow用户

发布于 2008-12-13 04:27:55

“一堆其他东西”都是集合体吗?我想是的,因为你的GROUP BY只有t3.id。如果是这样的话,这应该是可行的:

代码语言:javascript
复制
SELECT
     COUNT(DISTINCT t3.id)
FROM...

当然,另一个选择是:

代码语言:javascript
复制
SELECT
     COUNT(*)
FROM
     (
     <Your query here>
     ) AS SQ

我不使用MySQL,所以我不知道这些查询在那里是否有效。

票数 52
EN

Stack Overflow用户

发布于 2012-05-10 20:11:58

使用子查询:

代码语言:javascript
复制
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包含行数。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/364825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档