年齢分布テーブルを求めるSQL

投稿者: Anonymous

下記のテーブルA,テーブルBから、年齢の分布テーブルを求めるSQLが知りたいです。

テーブルA:ユーザIDと年齢のテーブル

ユーザID、年齢
1,20
2,21
3,26
4,68
5,34
6,16

テーブルB:年齢の区分テーブル

区分ID、年齢下限、年齢上限
1,0,10
2,11,20
3,21,30
4,31,40
5,41,50
6,51,60
7,61,70
8,71,120
..

欲しい年齢区分テーブルは以下を想定しております。

欲しいテーブル:各年齢区分にユーザが何人いるかのテーブル

区分ID,ユーザ人数,年齢範囲
1,100,0-10
2,20,11-20
3,41,21-30
5,77,31-40
….

CASEやSUM,JOINを使用して出来るのではないかと思うのですが…
ご教授お願いいたします。

解決

sa-yさんの回答とほぼ同じですが

SELECT
  区分ID,
  COUNT(ユーザID) AS ユーザ人数,
  CONCAT(MIN(年齢下限), '-', MIN(年齢上限)) AS 年齢範囲
FROM テーブルB
LEFT OUTER JOIN テーブルA ON 年齢 BETWEEN 年齢下限 AND 年齢上限
GROUP BY 区分ID;

LEFT OUTER JOINを使用すると0人の区分も得られ、ここをINNER JOINに変更すると0人の区分が省かれます。支障ないと思いますがユーザIDNULLでないことを前提に集計してます。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *