2011-09-27 46 views
-2

從表格中選擇找到的行數以及其他列的最簡單方法是什麼?我發現的唯一方法是做一個子查詢中加入,但我想它不是這麼簡單的任務應該是更多的資源重...COUNT()連同表的其餘列

我在尋找的結果是

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 

或類似的東西。

+1

我不明白你的問題。 「連同桌子上的其他欄目?」部分對我沒有邏輯。 – m0skit0

+0

他想要一個正常的選擇和一個計數(*),同時仍然獲得所有行和總數而不使用子查詢和連接。 – Johan

+0

@ m0skit0:他意味着這是行不通的:從mytable中選擇id,count(id) –

回答

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

+0

這可能會。但是,第二個查詢不起作用。 – user966939

+0

在這種情況下,您必須在第一個選擇後的單獨select中執行'select found_rows()'。 – Johan

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