COUNT()和表格列的其余部分一起使用

时间:2011-09-27 15:31:29

标签: mysql

选择找到的行数以及表格中的其他列的最简单方法是什么?我发现的唯一方法是使用子查询进行连接,但我认为它比这样一个简单的任务应该更加资源...

我正在寻找的结果是

SELECT lots_of_rows, count(*)
FROM table
with some magic, so it doesn't reduce everything in one row.

f1  f2  f3    rowcount
----------------------
a   b   c     3
a   c   e     3
a   r   g     3

或类似的东西。

2 个答案:

答案 0 :(得分:0)

您可以在没有子查询的情况下执行此操作,最后一行将保留所有空值以及字段rowcount中的总行数

SELECT lots_of_rows, count(*) as rowcount
FROM atable
GROUP BY atable.primary_key WITH ROLLUP

另一种选择可能是:

SELECT lots_of_rows FROM atable;
SELECT FOUND_ROWS() as rowcount;

第二个查询会立即返回,因为它只是从第一个查询中提供了行数。

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

答案 1 :(得分:0)

这是一种使用内联视图的方法,即使您的表没有主键也可以使用。通过使用内联视图,您不必使用连接。

注意:这是在Oracle上完成的,但我相信SQL应该适用于MySQL或者只需要很少的调整。

CREATE TABLE t1 (f1 CHAR(1), f2 CHAR(1), f3 CHAR(3));

INSERT INTO t1 VALUES ('a','b','c');
INSERT INTO t1 VALUES ('a','c','e');
INSERT INTO t1 VALUES ('a','r','g');

SELECT a.f1
     , a.f2
     , a.f3
     , b.cnt
  FROM t1 a
     , (SELECT COUNT(*) cnt from t1) b

结果:

    F1  F2  F3  CNT
1   a   b   c   3
2   a   c   e   3
3   a   r   g   3