下記条件のSQL文を御願します。
2つのテーブルがあります。
《テーブルA》
id | name | class | grade
《テーブルB》
id | teacher
テーブルA.class と テーブルB.id は関係性を持ってます。
行いたいこと:
テーブルBのIDとTEACHERをテーブルAのGRADEに入っているデータ毎の「個数」がほしい。
例:
テーブルA
1 | 岡田 | 1 | A
2 | 伊藤 | 1 | A
3 | 古城 | 2 | B
4 | 田中 | 1 | B
テーブルB
1 | 伊佐地
2 | 平
SQL実行:
1 伊佐地 A 2
1 伊佐地 B 1
2 平 B 1
下記のようなSQL文でいかがでしょうか。
SELECT tableB.id, tableB.teacher, tableA.grade, count(name) from tableA INNER JOIN tableB ON tableA.class = tableB.id GROUP BY tableA.grade, tableB.teacher;
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | MAS3 | 40回 | 35回 | 2回 | 2011-03-19 08:52:16 |
2 | chuken_kenkou | 722回 | 671回 | 54回 | 2011-03-19 09:59:20 |
コメント(1件)
念のためですが、deflationさんのSQLは、MySQLの拡張機能で動いています。
http://dev.mysql.com/doc/refman/5.1/ja/group-by-hidden-fields.html
標準SQLや、MySQLを除く主要なRDBMSでは、
GROUP BY tableA.grade, tableB.teacher
↓
GROUP BY tableA.grade, tableB.id, tableB.teacher
と、SELECT句で選択している tableB.id列も、GROUP BYに指定する必要があります。
もし、
GROUP BY tableA.grade, tableB.teacher
とした場合と、
GROUP BY tableA.grade, tableB.id, tableB.teacher
とした場合で結果が異なる(tableB表のid列、teacher列が一対で一意にならない)場合は、SELECT句で指定した tableB.id列の値は、何が返るかMySQLは保証していません。