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

SQLのレコード数取得についてまとめています。

SQLのレコード 数を取得する方法

レコードを取得する方法を、サンプルを交えて紹介します。MySQLのサンプルデータベースEmployeesを使用しています。

SQLのレコード数取得の基本

レコード数を取得するには、count()関数を使います。以下は、employeesテーブルの全件数を取得するサンプルです。

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

【関連記事】
SQL countのサンプルコード集 複数テーブル件数を一発で取得する 

SQLの重複を除いてレコード件数を取得する

SQLの重複を除いて件数をカウントするには、distinctを組み合わせます。以下のサンプルは、肩書(titles)テーブルから、部署ごとの肩書の種類の数を抽出すします。

titlesテーブルと、dept_emp(部署・社員紐付けテーブル)、departments(部署テーブル)をjoinで複数テーブル結合し、部署名(dept_name)で、group byによるグルーピングをおこなっています。

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 (3.58 sec)

【関連記事】
SQL distinctとcountを組み合わせてデータ種類をカウントする 

重複しているレコード数をカウントする

先ほどとは逆に、重複しているレコード数をカウントするサンプルです。salaries(給与)テーブルに2件以上のデータを持つ(昇給を一度でもしたことのある)社員番号(emp_no)を抽出します。

having count(*) > 1 で、データが2件以上のデータに絞込をしています。

サブクエリなどを使うよりも、比較的クエリのレスポンスが速いです。

select 
	emp_no, 
	max(to_date) as to_date, 
	count(*) 
from 
	salaries b 
group by 
	emp_no 
having 
	count(*) > 1
limit 10;

+--------+------------+----------+
| emp_no | to_date    | count(*) |
+--------+------------+----------+
|  10001 | 9999-01-01 |       17 |
|  10002 | 9999-01-01 |        6 |
|  10003 | 9999-01-01 |        7 |
|  10004 | 9999-01-01 |       16 |
|  10005 | 9999-01-01 |       13 |
|  10006 | 9999-01-01 |       12 |
|  10007 | 9999-01-01 |       14 |
|  10008 | 2000-07-31 |        3 |
|  10009 | 9999-01-01 |       18 |
|  10010 | 9999-01-01 |        6 |
+--------+------------+----------+
10 rows in set (0.00 sec)

count()のカッコ内に条件を指定する

count()の対象条件は、select文のwhereに記述することができますが、count()の引数に指定することも可能です。

以下は、employees(社員)テーブルから、gender(性別)がM(男性)のデータの件数をカウントするサンプルです。

引数にgender=’M’と指定すると全件を取得してしまうので、gender=’M’ or null と指定する必要があります。

初見だと何を指定しているのかわかりづらいため、無用なバグを避けるためにもselect文のwhereに条件を記述するのが良いでしょう。

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)

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

まとめ

ポテパンダの一言メモ
  • SQLのレコード数カウントはcount()を使う
  • distinctなどを組み合わせて、重複なし、重複した数のカウントが可能。
  • count()の引数内に条件指定が可能だが、メリットは少ない

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

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

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

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

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

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

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

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

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

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

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