<< 今夜分かるSQLインジェクション対策 | メイン | そもそも冥王星はプラネタリウムで存在しない >>

2006年11月02日

HAVING句の力(SQL, HAVING, 関係除算)

tcn004-s.jpg
HAVING句の力(SQL, HAVING, 関係除算)

HAVING 句はSQLの重要な機能のひとつですが、その真価は十分に知られていません。しかし、HAVING句もまた、集合指向というSQLの本質を理解するための重要な鍵であり、幅広い応用が可能です。本稿では、HAVING句の使い方を学びながら、「集合単位の操作」という集合指向言語の第二の特性を理解します。

恥ずかしながらHAVING句って、group by した後の結果を集計、条件で絞り込んだりするものでしょ?と思っていたのですが、

昔のSQLでは、HAVING句はGROUP BY句と併用しなければならなかったので、今でも時々そう勘違いされていることがありますが、現在の標準SQLではHAVING句を単独で使えます。

時代は変わりましたね!
はるか昔に受けた研修から知識の更新をしていませんでした(^^;

例えばHAVING句の便利な活用法として、次のような例が掲載されていました。

この数列は連続していません。4と7が抜けています。最初の問題はこのテーブルにデータの歯抜けが存在するか否かを調べることです。

この回答はわずか三行のSQLで解決できちゃいます。

SELECT '歯抜けあり' AS gap FROM SeqTbl HAVING COUNT(*) <> MAX(seq);

ご覧の通り、行数と最大値が異なっていれば歯抜けがあるというロジックになっています。これは美しい!他にも「ある数の集団の中で、もっとも多く登場する値(最頻値)を取り出す」「ある数の集団の中で、もっとも真ん中にある値(中央値、メディアン)を取り出す」などなど、統計学などでおなじみの値をSQL一発で求める方法が解説されています。

SQL、もう一回おさらいしないと。
久々にSQLが面白いと感じましたよ!

現場で使えるSQL―Oracle/SQL Server対応
小野 哲 藤本 亮
翔泳社
売り上げランキング: 11,926
おすすめ度の平均: 4.22
5 入門書として最適
5 データベースシステム管理者、分析者におすすめ
4 基本パターン集として活用したい

カテゴリー:DB

この記事のURL | コメントを書く・読む (0) | トラックバック (0) | このエントリーを含むはてなブックマーク livedoorクリップ


トラックバック

このエントリーのトラックバックURL:

※言及リンク(このページへのリンク)のないトラックバックは自動的に削除されます。詳しい経緯はコチラ

コメント一覧

コメントしてみる




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)


※英数字のみの投稿は自動的にはじかれます。
 
PAGE TOP