sql >> データベース >  >> RDS >> Sqlserver

SQLServerでクエリ結果の行数を返す方法

    データベースを操作する場合、クエリの結果を実際に返さずに、クエリによって返される行数を確認したい場合があります。または、特定のテーブルにある行の数を知りたい場合もあります。

    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(*)を使用するようにビューを変更します 問題を解決する必要があります。


    1. mysqlにレーベンシュタイン関数を追加する方法は?

    2. OracleデータベースにJARファイルをロードする方法は?

    3. mysql-> tblに挿入(別のテーブルから選択)といくつかのデフォルト値

    4. PostgreSQLで数値を通貨としてフォーマットする方法