Open Source WEB

GROUP BY で エイリアスを使用

準備がととのったので、最初の問題に対応するSQL文を考えてみよう

mysql> SELECT RIGHT(`名称`,1) AS `区分`, COUNT(*)
    -> FROM `東京` GROUP BY RIGHT(`名称`,1);
+------+----------+
| 区分 | COUNT(*) |
+------+----------+
| 区   |        4 |
| 市   |        2 |
| 村   |        2 |
| 町   |        1 |
+------+----------+
4 rows in set (0.00 sec)
 
mysql>

これで、一応、4区2市1町2村であることは分かった。 しかし、GROUP BY の後に RIGHT(`名称`,1) というような式がくるの嫌な感じである。 式はもっともっと長くなることがあり、何かで置き換えてすっきりしたいものである。

ということで、RIGHT(`名称`,1) のエイリアスである `区分` でグループに括ってみよう。

mysql> SELECT RIGHT(`名称`,1) AS `区分`, COUNT(*)
    -> FROM `東京` GROUP BY `区分`;
+------+----------+
| 区分 | COUNT(*) |
+------+----------+
| 区   |        4 |
| 市   |        2 |
| 村   |        2 |
| 町   |        1 |
+------+----------+
4 rows in set (0.00 sec)
 
mysql>

まったく同じ動作をするのだが、こっちの方が読みやすいSQL文だろう。

もう少し条件をつけてみよう。区分の数の少ない順に並べてみよう。

mysql> SELECT RIGHT(`名称`,1) AS `区分`, COUNT(*) AS `数`
    -> FROM `東京` GROUP BY `区分` ORDER BY `数` ASC;
+------+----+
| 区分 | 数 |
+------+----+
| 町   |  1 |
| 市   |  2 |
| 村   |  2 |
| 区   |  4 |
+------+----+
4 rows in set (0.01 sec)
 
mysql>

各区分の人口も求め、数が1より大きい区分についてのみ表示するようにしてみよう。

mysql> SELECT RIGHT(`名称`,1) AS `区分`,
    -> COUNT(*) AS `数`, SUM(`人口`) AS `人口`
    -> FROM `東京` GROUP BY `区分` HAVING `数`>1 ORDER BY `数` ASC;
+------+----+---------+
| 区分 | 数 | 人口    |
+------+----+---------+
| 市   |  2 |  619040 |
| 村   |  2 |    5759 |
| 区   |  4 | 1262477 |
+------+----+---------+
3 rows in set (0.00 sec)
 
mysql>

次第に長くなり、どんどんSQL的になってくるが、とくに問題なくエイリアスは 使えているみたいだ。

カラム名に`人口`とあるのだが、SUM(`人口`)により各区分の総和に対しても カラム名と同じ`人口`というエイリアスを付けたのだが、これも問題ないようだ。

エイリアスに漢字を使うのは大丈夫のようだ、たぶん。


戻る:式中の要素に漢字エイリアスを使うとどうなるか

次へ:ファンクションを作ってみよう


フィードバック:

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us