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