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

SQLite Count()をGROUP BYと組み合わせて、結果セットに「カウント」列を追加します

    SQLiteを使用するときにデータベースクエリの結果セットに「count」列を追加する必要がある場合は、count()を使用できます。 カウントを提供する関数、およびGROUP BY 結果をグループ化する列を指定する句。

    簡単な例を次に示します。

    SELECT ArtistId, count(Title)
    FROM Album
    GROUP BY ArtistId
    LIMIT 10;

    結果:

    ArtistId    count(Title)
    ----------  ------------
    1           2           
    2           2           
    3           1           
    4           1           
    5           1           
    6           2           
    7           1           
    8           3           
    9           1           
    10          1           

    この場合、各アーティストのIDは ArtistIdにリストされています 列に表示され、そのアーティストのアルバム数は count(Title)に表示されます。 列。

    これを少し読みやすくするために、同様のクエリを使用しますが、今回はIDではなくアーティストの名前を返します。これを行うには、アーティストと内部結合を実行します テーブル。

    この場合、WHEREを追加します Dの文字で始まるアーティストのみを返す句 。

    SELECT 
      ar.Name, 
      count(al.Title)
    FROM Album al
    INNER JOIN Artist ar
    ON ar.ArtistId = al.ArtistId
    WHERE ar.Name LIKE 'D%'
    GROUP BY ar.Name;

    結果:

    Name             count(al.Title)
    ---------------  ---------------
    David Coverdale  1              
    Deep Purple      11             
    Def Leppard      1              
    Dennis Chambers  1              
    Djavan           2              
    Dread Zeppelin   1              

    Count()による順序付け

    結果セットがカウント順に並べられるように、これを少し変更できます。つまり、アルバムの数が最も多いアーティストが最初にリストされるように、またはその逆になるように注文できます。

    SELECT 
      ar.Name, 
      count(al.Title)
    FROM Album al
    INNER JOIN Artist ar
    ON ar.ArtistId = al.ArtistId
    WHERE ar.Name LIKE 'D%'
    GROUP BY ar.Name
    ORDER BY count(al.Title) DESC;

    結果:

    Name                  count(al.Title)
    --------------------  ---------------
    Deep Purple           11             
    Djavan                2              
    David Coverdale       1              
    Def Leppard           1              
    Dennis Chambers       1              
    Dread Zeppelin        1              

    実際には、さらに一歩進んで、count()のエイリアスを追加できます。 。これにより、ORDER BYで複製する必要がなくなります。 条項。

    SELECT 
      ar.Name, 
      count(al.Title) AS AlbumCount
    FROM Album al
    INNER JOIN Artist ar
    ON ar.ArtistId = al.ArtistId
    WHERE ar.Name LIKE 'D%'
    GROUP BY ar.Name
    ORDER BY AlbumCount DESC;

    結果:

    Name                  AlbumCount
    --------------------  ----------
    Deep Purple           11        
    Djavan                2         
    David Coverdale       1         
    Def Leppard           1         
    Dennis Chambers       1         
    Dread Zeppelin        1         

    1. SQLSelectシンボルとは||平均?

    2. 変数をトリガーに渡す

    3. 複数の列の集計を含むSQLServerピボットテーブル

    4. MySQLストレージエンジンの最適化:高性能のためのInnoDB最適化の構成