如何在所有行中获取行数?

时间:2011-08-22 10:05:54

标签: sql

select id from table;
+------+
| id   |
+------+
|  774 |
| 2775 |
+------+

返回2行

select count(id) as count, id from table;
+-------+-----+
| count | id  |
+-------+-----+
|     2 | 774 |
+-------+-----+

但返回 1行

如何返回所有行,但每个记录中都有计数器?

SQL ???
+-------+------+
| count | id   |
+-------+------+
|     2 | 774  |
|     2 | 2775 |
+-------+------+

4 个答案:

答案 0 :(得分:1)

SELECT id, (select count(*) from table) AS TotalRows
FROM table;

虽然这似乎没必要,但每行总计数不会改变。

答案 1 :(得分:0)

使用group by

select id, count(id) 
from table
group by id;

(顺便说一下,你的SQL问题不起作用,至少在oracle和MySql中的AFAIK中)

答案 2 :(得分:0)

我不确定你要做什么,但是如果你试图获取行并获得相同查询中的总计数,因为它是一个资源密集型而且你不想重复你的加入/条件/在两个查询中的任何内容,在MySQL下你可以做:

# Returns a regular results set
SELECT SQL_CALC_FOUND_ROWS foo, bar FROM baz WHERE qux = 'corge' LIMIT 2;
# Returns the total count of found rows (without the LIMIT)
SELECT FOUND_ROWS();

如果您想要LIMIT之后的总行数,或者根本没有LIMIT,您可以跳过SQL_CALC_FOUND_ROWS

但是,一般来说,计算总行数并不能很好地扩展。如果可以,找到一种不需要你这样做的替代方法。例如,如果它用于分页,则考虑仅显示“下一个”/“上一个”按钮,而不显示总页数。如果页面中有30行,则可以LIMIT 31而不是30,只显示前30行,并检查第31行是否存在,以确定是否应显示“下一步”按钮。

答案 3 :(得分:0)

如果您使用的是oracle数据库,您也可以使用count Analytic函数来实现此任务,如下所示 -

  SELECT COUNT(*) OVER (PARTITION BY 1) AS COUNT, ID FROM TABLE