以下のコードを検討してください。
select vend_id, COUNT(vend_id) as num_prods
from Products
group by vend_id
最後の行を削除すると、次のエラーが発生します。
列 'Products.vend_id' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。
なぜこのエラーが発生するのですか? 私が犯している間違いは何ですか(カウントの仕組みを理解する上で)?
以下のコードを検討してください。
select vend_id, COUNT(vend_id) as num_prods
from Products
group by vend_id
最後の行を削除すると、次のエラーが発生します。
列 'Products.vend_id' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。
なぜこのエラーが発生するのですか? 私が犯している間違いは何ですか(カウントの仕組みを理解する上で)?
Count は集計関数です。
クエリで定義されたセット内のアイテムの数を返します。
クエリに列がない場合、count はクエリによって返された行の総数をカウントするだけです。
選択リストに他の列を追加する場合は、カウントする意味を与えるために group by ステートメントを追加する必要があります。Group by は、group by ステートメントの列の値が同じすべての行を操作するように集計関数に指示します。
質問で指定したクエリは、一意の vend_id 値のリストと、それらの値が指定されたテーブルに存在する回数を返します。vend_id 列がそのテーブルの一意のキーである場合、vend_id のリストと行ごとに 1 を取得します。
COUNT 関数の詳細な説明については、次のドキュメントを参照してください: http://msdn.microsoft.com/en-us/library/ms175997(v=sql.105).aspx
一般に、集計関数の説明については、このドキュメントを参照してください: http://msdn.microsoft.com/en-us/library/ms173454(v=sql.105).aspx
Group By を使用せずにクエリを記述する別の方法:
select vend_id, (select COUNT(*) from Products as products1 where products1.vend_id = Products.vend_id) as num_prods
from Products
count(vend_id)
クエリから最後の行を削除すると、集計関数と非集計関数の両方で vend_id が選択されるため、エラーが発生していますvend_id
。1 つの合計列 (カウント 1) と 1 つの詳細 1 (カウントなし) を求めています。合計されていない列の処理方法を SQL Server に指示する必要があります。
select vend_id
from Products
select count(vend_id)
from Products
上記のクエリはどちらも有効です。vend_id を選択してカウントする場合は、それでグループ化する必要があります。