Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのcount関数に条件指定する方法についてまとめています。

countはレコード数を取得する関数ですが、引数内で条件を指定し、1クエリで複数条件の件数を取得することが可能です。

count関数の引数に条件指定するサンプル

MySQLとPostgreSQLでは、count関数に3値論理式を指定することで、条件に合致したレコードのみをカウントすることが可能です。

select count(col1='Y' or null) from table;

テーブル「table」のカラム col1の内容が「Y」のレコードのみを数えるSQLです。count関数は、NULLではないレコードの件数を数えます。

col1=’Y’の場合は、TRUE or null=TRUE、’Y’以外の場合は、False or null=NULLとなるため、col1=’Y’の件数がカウントされます。count(col1=’Y’)のみだと、NULLではない全件のカウントを取得します。なお、count(*)は、NULLではない全件をカウントするための特殊な指定方法です。

MySQLでcountに条件式を指定する

実際に、MySQLで条件指定したcount関数を使ってSQLを実行してみましょう。

/* employeesテーブルから10件取得 */
mysql> select * from employees limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | Kyoichi    | Maliniak  | M      | 1989-09-12 |
|  10006 | 1953-04-20 | Anneke     | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski | F      | 1989-02-10 |
|  10008 | 1958-02-19 | Saniya     | Kalloufi  | M      | 1994-09-15 |
|  10009 | 1952-04-19 | Sumant     | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau  | F      | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.01 sec)

/* employeesテーブルの件数を取得 */
mysql> select count(*) from employees;
+----------+
| count(*) |
+----------+
|   300024 |
+----------+
1 row in set (0.09 sec)

/* 下記指定だと、テーブル全件数の取得となる */
mysql> select count(gender='M') from employees;
+-------------------+
| count(gender='M') |
+-------------------+
|            300024 |
+-------------------+
1 row in set (0.04 sec)

/* gender='M'の件数のみの指定
mysql> select count(gender='M' or null) from employees;
+---------------------------+
| count(gender='M' or null) |
+---------------------------+
|                    179973 |
+---------------------------+
1 row in set (0.08 sec)

MySQL :: MySQL 5.6 リファレンスマニュアル :: 3.3.4.8 行のカウント

PostgreSQLでcount関数に条件を指定する

PostgreSQLでも、同様にcount()内に条件式を指定することが可能です。

下記のSQLは、actorテーブルから、first_nameカラムの1文字目がNで始まるレコードの件数を取得します。

dvdrental=# select * from actor where first_name like 'N%';
 actor_id | first_name | last_name |      last_update       
----------+------------+-----------+------------------------
        2 | Nick       | Wahlberg  | 2013-05-26 14:47:57.62
       44 | Nick       | Stallone  | 2013-05-26 14:47:57.62
       50 | Natalie    | Hopkins   | 2013-05-26 14:47:57.62
      166 | Nick       | Degeneres | 2013-05-26 14:47:57.62
(4 rows)

dvdrental=# select count(first_name like 'N%' or null) from actor;
 count 
-------
     4
(1 row)

関連)Postgresqlの集約関数

なお、count関数に渡す条件は、where文で書き換えが可能です。

dvdrental=# select count(*) from actor where first_name like 'N%';
 count 
-------
     4
(1 row)

特に理由がなければ、可読性を考えて条件はwhere句で指定するのが良いでしょう。単一のSQLで複数の条件のレコードをカウントする場合などは、count関数の引数に条件式を指定するとすっきり記述することが可能です。

dvdrental=# select count(first_name like 'N%' or null), 
count(last_name like 'B%' or null) 
from actor;

 count | count 
-------+-------
     4 |    22
(1 row)

まとめ

ポテパンダの一言メモ
  • count関数の引数に条件式の指定が可能。
  • count関数の条件式は、whereの条件指定に書き換えることができる。
  • 1つのSQLで複数条件のcountの値を取得する場合は、count関数の条件式が役立つ。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。