Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
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(`人口`)により各区分の総和に対しても カラム名と同じ`人口`というエイリアスを付けたのだが、これも問題ないようだ。
エイリアスに漢字を使うのは大丈夫のようだ、たぶん。
フィードバック:
There is no comment.