skillup

技術ブログ

Database

SQL基礎 case&groupbyの活用について

投稿日:2016年10月12日 更新日:

主に集計タイプの計算で大活躍するgroupbyについて。

主な用途は集計とカット。特にcase式と連動した集計はかなり使える

例 nameとageで構成されたテーブルがあるとして、年代ごとの人数を出したいときなど(例えば未成年,20~69,70以上に分けたいときは下記のSQLで一発)

注意点としてグルーピングのキーをgroupbyとセレクトキーの両方に使う。

細かい構文上の注意点としてはgroupbyのcase文にasをつけないこと。※SELECTで定義しておけばGROUP BY age_segなどと書くこともできるようですが、どちらかというと非推奨。

PARTITION BY句を使うと集計せずにデータを出すことができ、なおかつソートまでできる。ただしMySQLにはない模様。

http://mickindex.sakura.ne.jp/database/db_support_sinan.html

使用例

name | age | age_seg | age_rank_in_class
山田   | 15   |    子供    | 1
田中   | 19   |    子供    | 2
渡邊   | 23   |    大人    | 1
佐藤   | 45   |    大人    | 2
鈴木   | 74   |    老人    | 1

参考文献
SQL実践入門

-Database
-

執筆者:


comment

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

関連記事

no image

CakePHPでの数字カンマ区切り&PHP&MySQL曜日の出力

今回は主に時間やお金の表示など、出力に関するネタです。 Contents1 Cakeでのカンマ区切り1.1 単純なカンマ区切り 例1,0001.2 \をつけるケース 例 \1,0001.3 円をつける …

no image

JPAでのリレーション(アノテーション使用)

JPAでリレーションを管理するとき、最初はアノテーションでやろうとしたんですが、結局やり方がわからずコンストラクタ式をかいて対処してました。 JPAでのリレーションに関して 外部キー制約があるやり方は …

no image

NOT EXISTSの利用

引き続きNOT EXISTSの利用です。 思った以上に使えますね・・・がムズイ。 今回は下記のようなテーブル(seats)があるとします。 ケースとしては新幹線の座席番号で空は席が空いている状態、占は …

no image

データ構造の基礎知識 後編 木構造

データベースの学習をしていたときの復習です。 データ構造の基礎知識 前編 メモリとポインタ、配列と連結リスト データ構造の基礎知識 中編 ハッシュ 今回はもう少し複雑な「木構造」について考えてみます。 …

no image

JPAでの多対多のリレーション

以前、このエントリーでJPAのリレーションについて説明しました。 今回は多対多について説明します。 Contents1 テーブル構成2 ソース2.1 CDのエンティティ2.2 Artistのエンティテ …

アーカイブ