SQLでcount(distinct *)
を使用できないのはなぜですか?すべての異なる行を数えるのと同じように?
select count(*) from (select distinct * from MyTable) as T
ただし、DISTINCT
を使用するクエリを再考することを強くお勧めします。多くの場合、GROUP BY
がより適切です(そしてより高速です)。
編集:質問のコメントを読んだ後、私はあなたがすべきであることを指摘する必要があります決して結果を得るために実際に必要な作業よりも多くの作業を行うDBMS。テーブルに重複する行がないことが事前にわかっている場合は、DISTINCT
を使用しないでください。
テーブル内のすべての列を選択して、...でグループ化できます。
SELECT column1, column2, column3, count(*)
FROM someTable
GROUP BY column1, column2, column3
何故なの?
select
count(distinct name)
from
people
あなたは確かにできます。
ただし、識別子を持っている場合は、完全に異なる行はありません。しかし、あなたは例えばすることができます:
SELECT COUNT(DISTINCT SenderID) FROM Messages
Sql Server2005でCTEを試すことができます
;WITH cte AS (
SELECT DISTINCT Val1,Val2, Val3
FROM @Table
)
SELECT COUNT(1)
FROM cte
質問に答えるには、ドキュメントから
テーブル内の行の総数を返すために、すべての行をカウントする必要があることを指定します。 COUNT()はパラメーターを受け取らず、DISTINCTでは使用できません。COUNT()は、定義上、特定の列に関する情報を使用しないため、式パラメーターを必要としません。 COUNT(*)は、重複を削除せずに、指定されたテーブルの行数を返します。各行を個別にカウントします。これには、NULL値を含む行が含まれます。
COUNT(*)は、クエリに一致する行の数です。
行には、ROWIDなどの一意の情報が含まれます。すべての行は定義上区別されます。
代わりに、いくつかのフィールドで値の個別のインスタンスをカウントする必要があります。