2011-09-27 13 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; 

2番目のクエリが返されます即座に、最初のクエリから行カウントを取得するだけです。

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

+0

そうかもしれません。しかし、2番目のクエリは機能しません。 – user966939

+0

その場合、最初のものの後の別の選択で '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 
関連する問題