MySQLでWHERE句とCOUNT(*)を使いこなして、データから価値ある情報を引き出そう
MySQLでWHERE句内でCOUNT(*)を使用する方法
MySQLのCOUNT(*)
関数は、テーブル内の行数をカウントします。通常、SELECT
ステートメントの後に使用されますが、WHERE
句内で条件付きのカウントを行うことも可能です。
例
次の例では、products
テーブル内の、価格が100円より高い商品の数をカウントしています。
SELECT COUNT(*)
FROM products
WHERE price > 100;
動作
COUNT(*)
関数は、WHERE
句で指定された条件を満たす行数のみをカウントします。上記の例では、price
列の値が100円より高い行のみがカウントされます。
注意点
COUNT(*)
は、NULL
値もカウントします。WHERE
句で指定された条件がFALSE
の場合、カウント結果は0になります。COUNT(*)
は、パフォーマンスに影響を与える可能性があります。
代替方法
COUNT(*)
の代わりに、COUNT(column_name)
を使用することもできます。この場合、column_name
列のNULL
値はカウントされません。
応用
WHERE
句内でCOUNT(*)
を使用することで、さまざまな条件付きのカウントを行うことができます。
- 特定のカテゴリに属する商品の数をカウントする
- 特定のユーザーが作成した注文数をカウントする
- 特定の期間内にログインしたユーザー数をカウントする
- 上記の情報は参考用です。詳細はMySQL公式ドキュメントを参照してください。
キーワード
- MySQL
- COUNT
- 集計
- WHERE句
# テーブル products のすべての商品の数をカウントする
SELECT COUNT(*)
FROM products;
# 価格が100円より高い商品の数をカウントする
SELECT COUNT(*)
FROM products
WHERE price > 100;
# 在庫数が5個より少ない商品の数をカウントする
SELECT COUNT(*)
FROM products
WHERE stock < 5;
# 特定のカテゴリに属する商品の数をカウントする
SELECT COUNT(*)
FROM products
WHERE category = '書籍';
# 特定のユーザーが作成した注文数をカウントする
SELECT COUNT(*)
FROM orders
WHERE user_id = 123;
# 特定の期間内にログインしたユーザー数をカウントする
SELECT COUNT(*)
FROM login_history
WHERE login_date BETWEEN '2024-01-01' AND '2024-03-31';
解説
各サンプルコードは、SELECT
ステートメントとCOUNT(*)
関数を使用して、テーブル内の行数をカウントしています。WHERE
句を使用して、カウント対象となる行を絞り込んでいます。
実行方法
上記のサンプルコードをMySQLクライアントで実行して、結果を確認することができます。
WHERE句内でCOUNT(*)を使用する他の方法
サブクエリを使用して、条件を満たす行の数を取得し、それを外側のクエリでカウントすることができます。
SELECT COUNT(*)
FROM (
SELECT *
FROM products
WHERE price > 100
);
GROUP BYとCOUNT(*)を使用する
GROUP BY
句を使用して、条件を満たす行をグループ化し、COUNT(*)
を使用して各グループ内の行数をカウントすることができます。
SELECT COUNT(*)
FROM products
WHERE price > 100
GROUP BY category;
CASE
式を使用して、条件を満たす行を1としてカウントし、SUM()
関数を使用して合計値を取得することができます。
SELECT SUM(CASE WHEN price > 100 THEN 1 ELSE 0 END)
FROM products;
それぞれの方法のメリットとデメリット
方法 | メリット | デメリット |
---|---|---|
サブクエリ | 複雑な条件を指定できる | 処理速度が遅くなる可能性がある |
GROUP BYとCOUNT(*) | グループごとのカウント結果を取得できる | 複雑な条件を指定するのが難しい |
CASE式 | 処理速度が速い | 複雑な条件を指定するのが難しい |
mysql count aggregation