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

SQLのカウントについてまとめてます。

SQLでカウントするには、COUNT関数を使う

SQLでデータの件数をカウントするには、count関数を使います。

以下は、MySQLでの使用例。MySQLのサンプルデータベースEmployeesを使用しています。

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)

mysql> select count(*) from employees;
+----------+
| count(*) |
+----------+
|   300025 |
+----------+
1 row in set (1.20 sec)

【関連記事】
SQL countの条件は引数内に記述できる 単クエリで複数の件数を取得する方法 

テーブルemployees(社員)の全件数はcount(*)で取得できます。select文のwhere以降で条件指定をして絞り込んだ件数を取得することも可能。

また、count()のカッコ内に条件を記述することができます。その場合、記述の仕方にコツがあります。性別が男性(gender=’M’)の件数を取得するために「count(gender=’M’)」と記述しても全件を取得してきてしまいます。「count(gender=’M’ or null)」と指定する必要があるんですね。

mysql> select count(gender='M') from employees;
+-------------------+
| count(gender='M') |
+-------------------+
|            300025 |
+-------------------+
1 row in set (0.04 sec)

mysql> select count(gender='M' or null) from employees;
+---------------------------+
| count(gender='M' or null) |
+---------------------------+
|                    179974 |
+---------------------------+
1 row in set (0.08 sec)

グルーピング後の件数をカウントする

group byでグルーピングした件数の取得も可能です。以下は、departments(部署)、dept_emp(部署・社員紐付けテーブル)、titles(役職)テーブルをjoinし、各部署の役職の数をカウントした例です。

たとえば、Customer Serviceには7種類の役職があり、Salesには3種類の役職があることがわかります。

役職の数をカウントするため、count(distince title)で重複した役職名を1つと見なしてカウントしているんですね。

SELECT dept_name, count(distinct title) FROM `titles`
left join dept_emp on titles.emp_no = dept_emp.emp_no
left join departments on dept_emp.dept_no = departments.dept_no
group by dept_name
order by dept_name;

+--------------------+-----------------------+
| dept_name          | count(distinct title) |
+--------------------+-----------------------+
| Customer Service   |                     7 |
| Development        |                     7 |
| Finance            |                     3 |
| Human Resources    |                     3 |
| Marketing          |                     3 |
| Production         |                     7 |
| Quality Management |                     5 |
| Research           |                     7 |
| Sales              |                     3 |
+--------------------+-----------------------+
9 rows in set (2.94 sec)

【関連記事】
SQL countのサンプルコード集 複数テーブル件数を一発で取得する | 「ポテパンスタイル」

まとめ

ポテパンダの一言メモ
  • count(*)で件数の取得が可能。whereで条件指定もできる
  • count()のカッコ内に条件を指定できるが、指定方法が特殊なので注意
  • count(distinct カラム名)指定で、重複データを1個と見なしてカウントできる

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

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

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

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

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

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

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

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

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

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

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