Accessで次のようなテーブル「member」があったとします。
id | name | roomid | weight | date |
---|---|---|---|---|
1 | Ito | 1 | 60 | 2013/1/1 |
2 | Abe | 1 | 62 | 2013/1/1 |
3 | Sato | 2 | 61 | 2013/1/1 |
4 | Eda | 2 | 68 | 2013/1/1 |
5 | Ito | 1 | 65 | 2013/7/1 |
ある学校の体重の管理簿だと考えてください。
roomidが教室番号です。weightが体重で、dateがそれを量った日です。
このテーブルを使って教室毎の人数を数えてください。
単純に数えるには次のようになります。
SELECT roomid, COUNT(name) AS ct
FROM member
GROUP BY roomid;
FROM member
GROUP BY roomid;
しかしこれでは正しくありません。
ポイントはIto君が体重を2回図ったのでレコードが2個ある点です。
単純に数えると2名とカウントしてしまいます。
まず重複を除きます。
SQLだと次のようになります。
SELECT roomid, name
FROM member
GROUP BY roomid, name;
FROM member
GROUP BY roomid, name;
教室と名前でグループ化すると重複はなくなります。
roomid | name |
---|---|
1 | Ito |
1 | Abe |
2 | Sato |
2 | Eda |
次にこれを使ってカウントします。
SQLはテーブルの代わりに別のSQLの実行結果を使うことができます。
SELECT roomid, COUNT(name) AS ct
FROM (
SELECT roomid, name
FROM member
GROUP BY roomid, name
)
GROUP BY roomid;
FROM (
SELECT roomid, name
FROM member
GROUP BY roomid, name
)
GROUP BY roomid;
roomid | ct |
---|---|
1 | 2 |
2 | 2 |
コメント