2016-04-28 16 views
1

かなり頻繁に、テーブル内の異なるレコードの数を数える必要があります。しかし、MySQLでもないテーブル内の異なるレコード(行)の数

select count(distinct *) from t; 

select count(distinct t.*) from t; 

作品。

select count(*) as countdistinctrows 
from (
    select distinct * from t 
) x; 

これで回避できますが、これは醜いです。別個の行の数を求める方法はありませんか?その後、個別のは、テーブル内の行数に適用されていて、これを使用しない場合はこれ

select count(*) from t; 
+1

「Distinct *」は矛盾です – Strawberry

+0

もちろん、リレーショナルテーブルに重複する行があるのはなぜですか?主キーはありませんか? "醜い回避策"はあなたのカウントを得るための最良の方法です。 – dnoeth

+0

@dnoeth:確かに、重複した行がないようにしたい。しかし、私のシナリオでは単純な帽子ではありません。私はデータからテーブルを作成します。 col1は、カテゴリを示す文字列であると考えられる。しかし、ソースデータでは、「カテゴリ1」または「カテゴリ1」とすることができます。私は混乱をきれいにするためにregexp_replaceでmysqlを使用します。その後、私はまだ別の行だけを持っているかどうかを知りたいです。 – diffset

答えて

0

と同じになりますので、ところで、

select distinct count(*) from t; 

は答えではありません:

select count(*) as countdistinctrows 
from (
    select distinct * from t 
) x; 

私は考えることができる唯一の選択肢は、手動ですべての列名を指定することです10

+0

テーブル内に50個以上のカラムがあることがあります。 – diffset

+0

@diffset実際には他の方法はありません。サブクエリやカウント(別々の列など)からカウント(*)を使うことができます。 – fthiella

関連する問題