2012-02-09 5 views
1

テーブル内のレコードの総数を調べたいと思います。 私はこれは、異なるカラム名に基づいて、いくつかの重複と周りに128行を持って、次の列個別の行を検索するMySQLクエリで不正な結果が表示される

id, name, product, rating, manufacturer price 

を持つテーブルを持っています。

私は唯一の明確な行を選択します:

select distinct name, product, rating, maufacturer, price from table 

これは、ページネーションのために47行

を返し、私は明確なレコードの総数を見つける必要があるので、私は別のsatatement持っている:

select distinct count(name), product, rating, maufacturer, price from table 

しかし、これは128の代わりに、47

どのようにCを返します。私は別個の行の総数を得ますか?どんな助けでも大歓迎です。あなたがはっきりと逆にカウントを持っているGROUP BY name, product, rating, maufacturer, price

答えて

1

を追加おかげ

+0

役立ちます

select distinct name, product, rating, manufacturer, price from table1 select count(*) from ( select distinct name, product, rating, manufacturer, price from table1 ) as result 

希望:そのデータと一致し、テーブル内のレコードの量を取得するために、2つのクエリの実際のデータを取得し1、もう一方を実行してみてください名前だけでなく、すべての名前、製品などの列とは区別されます。これは、47回の結果を与えるかもしれない。名前が常に同じで変更が他の値である場合でも1行であっても –

+1

本当に、私はいつも最終的な結果として何をしようとしているのか、これらのような質問が不思議です。 – jjs9534

0

してみてください。カウント時

SELECT COUNT(DISTINCT column_name) FROM table_name 

また、私はあなたの結果は、これらの他のフィールドのため、予期しないだろう、余分なフィールドをドロップします。

0

それは

select distinct 
     t1.product, 
     t1.rating, 
     t1.maufacturer, 
     t1.price, 
     JustTheCount.DistCnt 
    from 
     table t1, 
     (select count(*) as DistCnt 
      from (select distinct  
         t2.product, 
         t2.rating, 
         t2.maufacturer, 
         t2.price 
         from 
         table t2) 
    ) JustTheCount 
0
... TWICEあなたの実際のクエリを実行している...明確なためINNERを必要として、単一の行が返されたとして、それらのカウントを取得した後、個別の選択元にそれを参加します

01:同じレコードの数を取得するには、しかし

SELECT DISTINCT name, product, rating, maufacturer, price FROM table 

次の形式を使用し、:DISTINCT句がname列の前にあるため、次のクエリで

、あなたは明確な名前を持つ行を取得していますあなたは明確な名前をカウントしているように、DISTINCTCOUNT機能の内部に入ることを

SELECT COUNT(DISTINCT name) FROM table 

注意してください。おそらく、他の列をカウントクエリに含めることは望ましくありません。なぜなら、これらの列は、そのセットからランダムなサンプルになるからです。もちろん、ランダムなサンプルが必要な場合は、それらを含めてください。

ほとんどのアプリケーションでは、最初にカウントクエリが実行され、続いてクエリが実行され、結果が返されます。また、COUNT(*)は見積もりに過ぎず、値は実際に返されたレコード数と異なる場合があります。

SELECT DISTINCT COUNT(name), product FROM tableは、MySQL 4.xでも有効なクエリではありません。集約カラムと非集約カラムを混在させることはできません。 5.xでは実行されますが、非集計列の値はセットのランダムサンプルになります。ここにいくつかの炎の火花のリスクが

1

あなたは結果としたり、別のクエリを実行したい場合は同じクエリのカウントを取得したい場合、それは非常に明確ではありません。ここでは両方の解決策を考えてみましょ以前のソリューションにも視覚的に魅力的な、非常に効率的ではないではありません各行のカウント(*)を繰り返すことになります

select distinct name, product, rating, manufacturer, price, (
    select count(*) from (
     select distinct name, product, rating, manufacturer, price from table1 
    ) as resultCount) as resultCount 
from table1 

注意:新しい列として結果に。これはOPが期待するこれで問題がある

関連する問題