データベースを操作する場合、クエリの結果を実際に返さずに、クエリによって返される行数を確認したい場合があります。または、特定のテーブルにある行の数を知りたい場合もあります。
SQL Serverでは、T-SQLのCOUNT()
を使用できます クエリで返される行数を返す関数。
データ
このページの例で使用するデータは次のとおりです。
SELECT * FROM Tasks;
結果:
TaskId TaskName TaskDescription TaskCode ------ ------------ --------------- -------- 1 Feed cats TBA null 2 Water dog TBA null 3 Feed garden TBA null 4 Paint carpet TBA null 5 Clean roof TBA null 6 Feed cats TBA null
例–テーブル内のすべての行をカウントする
COUNT()
の使用例を次に示します。 テーブル内の行の総数を返す関数:
SELECT COUNT(*) FROM Tasks;
結果:
6
結果を絞り込むための基準を提供しなかったため、これはテーブルの行数を返します。
例–基準の追加
特定の基準に基づいて返される行数をカウントする例を次に示します。
SELECT COUNT(*) FROM Tasks WHERE TaskName LIKE '%dog%' OR TaskName LIKE '%cat%';
結果:
3
例–単一の列を指定する
前の例はすべて、アスタリスクを使用してすべての列にカウントを適用しています。特定の列を指定するオプションもあります。
例:
SELECT COUNT(TaskName) FROM Tasks;
結果:
6
この例では、アスタリスクを使用したときに得られたのと同じ結果が返されますが、必ずしもそうとは限りません。たとえば、別の列を指定するとどうなりますか。
SELECT COUNT(TaskCode) FROM Tasks;
結果:
0
この場合、特定の列のすべての行にnull値が含まれているため、ゼロになります。
例–明確
DISTINCT
を追加できます 一意の(null以外の)値の数のみを返す引数。
TaskDescription
のすべての行にお気づきかもしれません 列に同じ値(「TBA」)が含まれています。そしてTaskName
列の値も重複しています(「猫に餌をやる」が2回表示されます)。重複をカウントしたくない場合は、問題が発生する可能性があります。
DISTINCT
を適用すると次のようになります TaskName
への引数 列:
SELECT COUNT(DISTINCT TaskName) FROM Tasks;
結果:
5
そしてここでは、TaskDescription
に対して適用されます テーブル(すべての値が同じ場合):
SELECT COUNT(DISTINCT TaskDescription) FROM Tasks;
結果:
1
例–HAVING句
COUNT()
を使用することもできます HAVING
で 返される行数に基づいて結果セットを制限する句。
例:
USE Music; SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count' FROM Artists ar INNER JOIN Albums al ON ar.ArtistId = al.ArtistId GROUP BY ar.ArtistName HAVING COUNT(al.AlbumName) > 1;
結果:
ArtistName Album Count ------------------------- ----------- Allan Holdsworth 2 Devin Townsend 3 Iron Maiden 5 Michael Learns to Rock 3 Tom Jones 3
この例では、前の例とは異なるデータベースを使用しています。複数のアルバムをリリースしたアーティストのみが返されます。その数は、希望するアルバムの数に応じて変更できます:
USE Music; SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count' FROM Artists ar INNER JOIN Albums al ON ar.ArtistId = al.ArtistId GROUP BY ar.ArtistName HAVING COUNT(al.AlbumName) > 4;
結果:
ArtistName Album Count ------------------------- ----------- Iron Maiden 5
COUNT_BIG()関数
T-SQLにはCOUNT_BIG()
もあります COUNT()
とまったく同じように機能する関数 、ただしCOUNT()
intを返します データ型とCOUNT_BIG()
bigintを返します データ型。
この関数は、グループ化されたクエリを使用するインデックス付きビューに役立ちます。 COUNT(*)
を含むビューのインデックスを作成しようとすると見つかる場合があります 、次のようなエラーが発生します:
Cannot create index on view "Music.dbo.AlbumsByArtist" because it uses the aggregate COUNT. Use COUNT_BIG instead.
このような場合、COUNT_BIG(*)
を使用するようにビューを変更します 問題を解決する必要があります。