SQLで重複を除いてカウントする

Pocket

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;

しかしこれでは正しくありません。
ポイントはIto君が体重を2回図ったのでレコードが2個ある点です。
単純に数えると2名とカウントしてしまいます。
まず重複を除きます。
SQLだと次のようになります。

SELECT 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;
roomid ct
1 2
2 2

[ 2013年7月13日 | カテゴリー: Access | タグ: ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報