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 |
+-------+------+
答案 0 :(得分:1)
SELECT id, (select count(*) from table) AS TotalRows
FROM table;
虽然这似乎没必要,但每行总计数不会改变。
答案 1 :(得分:0)
答案 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