MySQLにはCOUNT()が含まれています 関数。クエリから返される行数を確認できます。この関数はSQL標準の一部であり、ほとんどのリレーショナルデータベース管理システムで使用できます。
COUNT() 関数を使用して、必要に応じてクエリの結果に影響を与えることもできます。たとえば、指定された量を超える行数を持つ結果のみを返すことができます。
この記事には、COUNT()の例が含まれています MySQLでの使用。
データ
まず、このページの例に使用するデータは次のとおりです。
SELECT * FROM Tasks;
結果:
+--------+-------------------+-----------------+ | TaskId | TaskName | TaskDescription | +--------+-------------------+-----------------+ | 1 | Do garden | NULL | | 2 | Feed cats | NULL | | 3 | Paint roof | NULL | | 4 | Take dog for walk | NULL | | 5 | Relax | NULL | | 6 | Feed cats | NULL | +--------+-------------------+-----------------+
テーブル内のすべての行をカウントする
COUNT()を使用できます テーブル内の行の総数を返すには:
SELECT COUNT(*) FROM Tasks;
結果:
+----------+ | COUNT(*) | +----------+ | 6 | +----------+
結果を絞り込むための基準を提供しなかったため、これはテーブルの行数を返します。
結果を絞り込む
WHEREを追加すると 結果セットを絞り込む句を使用すると、取得する数値が少なくなります:
SELECT COUNT(*) FROM Tasks WHERE TaskName LIKE '%cat%';
結果:
+----------+ | COUNT(*) | +----------+ | 2 | +----------+
単一列とアスタリスク(*)
前の例はすべて、アスタリスクを使用してすべての列にカウントを適用しています。他のクエリと同様に、アスタリスクはオプションであり、すべての列を返すためのワイルドカードとして使用されます。したがって、COUNT()を使用する場合 関数の場合、引数として(すべての列ではなく)特定の列を指定するオプションもあります。
例:
SELECT COUNT(TaskName) FROM Tasks;
結果:
+-----------------+ | COUNT(TaskName) | +-----------------+ | 6 | +-----------------+
この例では、アスタリスクを使用したときに得られたのと同じ結果が返されますが、必ずしもそうとは限りません。たとえば、別の列を指定するとどうなりますか。
SELECT COUNT(TaskDescription) FROM Tasks;
結果:
+------------------------+ | COUNT(TaskDescription) | +------------------------+ | 0 | +------------------------+
この場合、特定の列のすべての行にnull値が含まれているため、ゼロになります。
例–明確
DISTINCTを追加できます NULL以外の異なる行数のみを返す引数 値。
TaskNameにお気づきかもしれません 列の値が重複しています(「Feedcats」が2回表示されます)。重複をカウントしたくない場合は、問題が発生する可能性があります。
DISTINCTを適用すると次のようになります TaskNameへの引数 列:
SELECT COUNT(DISTINCT TaskName) FROM Tasks;
結果:
+--------------------------+ | COUNT(DISTINCT TaskName) | +--------------------------+ | 5 | +--------------------------+
したがって、テーブルには6つの行が含まれていますが、そのうちの2つは重複しています。したがって、これら2つは1つとしてカウントされ、5つの結果が得られます。
例–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 | +------------------------+-------------+ | Iron Maiden | 5 | | Devin Townsend | 3 | | Michael Learns to Rock | 3 | | Tom Jones | 3 | | Allan Holdsworth | 2 | +------------------------+-------------+
このクエリは、複数のアルバムをリリースしたアーティストのみを返します。 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) > 4;
結果:
+-------------+-------------+ | ArtistName | Album Count | +-------------+-------------+ | Iron Maiden | 5 | +-------------+-------------+