8.4で、分析関数(window関数)がサポートされました。本稿では、『分析関数の衝撃4(完結編)』を、PostgreSQL8.4用にリニューアルした内容を扱います。全称文を述語で表現する最後に参考資料はじめに2009年7月に正式リリースされたPostgreSQL8.4で、分析関数(window関数)がサポートされました。本連載では、分析関数の衝撃シリーズを、PostgreSQL用にアレンジした内容と、OracleやDB2の分析関数をPostgreSQL8.4で代用する方法を扱います。本稿では、『分析関数の衝撃4(完結編)』をPostgreSQL8.4用にリニューアルした内容を扱います。『帰ってきたHAVING句』に記載されているSQLをwindow関数を使って記述していきますので、『SQLで集合演算』と『帰ってきたHAVING句』を、読まれてからの方が理解しやすいと思います。8.4beta2で動作確認しました。その他、次の環境でも応用が可能です。2つのテーブルが相等なら「等しい」、そうでなければ「異なる」を返すクエリまずは「2つのテーブルが相等か」を判定し、結果を返すクエリについて考えてみましょう。『SQLで集合演算』では、以下のSQLが提示されています。TMP;これをwindow関数で書き換えてみます。数学の視点から集合が等しいという意味について考察してみます。数学の集合では集合の相等性を調べる公式として、次の式が成立することが知られています。B)一方、下記の場合も同様です。B)集合Aと集合Bが両方とも空集合の場合に式が正しいことは明らかです。Bの場合のみ左辺の条件が成立します。要素数はwindow関数のcount関数を使えば求められますし、包含関係は差集合が空集合となるかを調べれば分かります。window関数で書き換えたSQLは下記となります。a;ただし、上記のSQLだと、tbl_Aが空集合(レコードがない)の場合は、必ず等しいと判定されてしまいます。これを考慮したSQLは下記のようになります。a;実際の業務においてはテーブルの中身や、2つのSQLの出力結果を比較する場合、空集合を考慮する必要がないことがほとんどです。SQLの結果表示を途中で中止することもできるので、通常は下記のSQLで十分でしょう。OracleSQLパズルの運営者。AtCoderレーティングは1204(水色)。圧縮・解凍UNIX基本講座@CodeZine『CodeZine(コードジン)』の公式アカウントです。【NEW】デブスト2019デブサミ2019福岡・関西デブサミ2019夏デブスト関西デブサミ2019×ログインEメールパスワード※旧SEメンバーシップ会員の方は、同じ登録情報(Eメール&パスワード)でログインいただけます。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。