受講料が最大70%OFF 受講料が最大70%OFF

SQL countについてまとめています。

SQL countの構文

SQLのcountはレコードの件数を数えます。count(*)とすると、対象レコードの全数を数えられます。

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

SQL countの使い方

複数の条件で対象レコードの件数をcountする

count(カラム名=値 or null)という指定で、各条件にマッチしたレコードの件数を1つのSQLで取得できます。以下は、employees(社員)テーブルから、gender=M(男性)、gender=F(女性)、emp_no(社員番号)が400,000以上の件数を取得するSQLです。

mysql> select count(gender='M' or null),count(gender='F' or null), count(emp_no>400000 or null) from employees;
+---------------------------+---------------------------+------------------------------+
| count(gender='M' or null) | count(gender='F' or null) | count(emp_no>400000 or null) |
+---------------------------+---------------------------+------------------------------+
|                    179974 |                    120051 |                       100000 |
+---------------------------+---------------------------+------------------------------+
1 row in set (0.26 sec)

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

重複を取り除いてcountする(distinct)

同じレコード(重複)を除いてカウントするには、distinctと組み合わせます。下記は、部署名(dept_name)ごとの、役職(title)の種類をカウントするSQLです。

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を組み合わせてデータ種類をカウントする

集計区間を限定して件数をカウントする(over)

巨大データのデータ分析の目的で、overを使って集計区間を限定してレコード件数をカウントすることが可能です。

以下は、SQL Serverの例です。部署ごとに給与の最小、最大、平均、社員数を出力しています。

SELECT DISTINCT Name  
       , MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary  
       , MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary  
       , AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary  
       ,COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept  
FROM HumanResources.EmployeePayHistory AS eph  
JOIN HumanResources.EmployeeDepartmentHistory AS edh  
     ON eph.BusinessEntityID = edh.BusinessEntityID  
JOIN HumanResources.Department AS d  
ON d.DepartmentID = edh.DepartmentID
WHERE edh.EndDate IS NULL  
ORDER BY Name;  

Name                          MinSalary             MaxSalary             AvgSalary             EmployeesPerDept  
----------------------------- --------------------- --------------------- --------------------- ----------------  
Document Control              10.25                 17.7885               14.3884               5  
Engineering                   32.6923               63.4615               40.1442               6  
Executive                     39.06                 125.50                68.3034               4  
Facilities and Maintenance    9.25                  24.0385               13.0316               7  
Finance                       13.4615               43.2692               23.935                10  
Human Resources               13.9423               27.1394               18.0248               6  
 :
 :

参考)COUNT (Transact-SQL) – SQL Server | Microsoft Docs

overは、最近では主要のDBMS(Oracle、MySQL、SQL Server、PostgreSQL)すべてが対応しています。

【関連記事】
SQL overは、分析関数 ビッグデータの集計区間を制限しレスポンスを上げる

まとめ

ポテパンダの一言メモ
  • count(*)は、対象のレコード件数をすべてカウントする
  • count(カラム名=値 or null)で複数のカウントを1つのSQLで実行できる
  • distinctと組み合わせることで重複を除外してカウントが可能

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

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

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

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

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

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

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

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

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

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

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