キムラデービーブログ

オープンソースデータベースを加速する「キムラデービー」のブログです。カレー日記を兼ねてます。なお著者は2010-06-01より日本オラクルに在籍していますが、本サイト(ブログ、またはウェブサイト)において示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。
<< Firebird 2.1の新機能(3) 共通表式(CTE: Common Table Expression), 再帰問い合わせ | main | Firebird 2.1の新機能(5) MERGE文 >>
Firebird 2.1の新機能(4) LIST関数
0
    文法:
    <list function> ::=
    LIST '(' [ {ALL | DISTINCT} ] <value expression> [',' <delimiter value> ] ')'

    <delimiter value> ::=
    { <string literal> | <parameter> | <variable> }

    文法ルール:
    1) ALLもDISTINCTも指定されていないときには、ALLが暗黙指定となる。
    2) もし<delimiter value>が省略されいた場合にはカンマが使われる。

    注:
    1) 数値や日付時刻型は評価の際、暗黙的に文字列型に変換される。
    2) 戻り値の型はVARCHAR(32765)なのでLIST関数は伸張に使ってください。
        Firebirdの結果セットの最大長は64KBです。
    3) グループ内の順序は実装定義されています。



    Sybase(というより、元々はPowersoft/Sybaseに買収される前のWATCOM SQL)で
    便利な関数LIST()がサポートされるようになりました。

    DBCAT DBNAME
    ----- ------
    1 Firebird
    2 Oracle
    1 MySQL
    2 DB2
    1 PostgreSQL
    2 SQLServer



    DBCAT DBNAME
    ----- ------
    1 Firebird,MySQL,PostgreSQL
    2 Oracle,DB2,SQLServer

    のようにするための関数です。

    SELECT DBCAT, LIST(DBNAME)
    FROM DBPRODUCT
    GROUP BY DBCAT;

    と使います。



    商用DB御三家(IBM DB2, MS SQL Server, Oracle)では、LIST()に直接対応する関数はありませんが、
    いくつか方法があります。

    (1) リストに入る値の最大個数がわかる場合。
    10-16 Group_Concat関数を模倣(最大数固定)

    (2) Oracleの場合は、階層問い合わせにより最大個数がわからなくても実現可能です。
    10-17 Group_Concat関数を階層問い合わせで模倣

    (3) IBM DB2, MS SQL Serverの場合は、with句を使った再帰的な問い合わせで実現可能です。
    この件について一番まとまった本は、SQLクックブックです。
    レシピ6.10 テーブル行から区切りリストを作成する、を参照してください。

    (4) ユーザー定義関数やストアドプロシジャを使う。
     結果行セットを戻せるストアドプロシジャを書けるDBや、
    集計関数をユーザー定義できるDBであれば、LIST関数相当のものが自作できます。



    オープンソースDB御三家では、PostgreSQLが上記(1)の方法で可能です。
    MySQLの場合は、GROUP_CONCATを使って、LIST()を直接置換できます。
    | meijik | Firebird/InterBase | 06:09 | comments(4) | trackbacks(0) | - | - |
    PostgreSQLでは、配列型を使ってもいいです。
    http://www.postgresqlforums.com/forums/viewtopic.php?f=10&t=387
    | 明智重蔵 | 2008/10/16 9:31 PM |
    おおっ、これはすごいですね〜。PostgreSQLならでは!
    | MeijiK | 2008/10/17 12:20 AM |
    上記サイトが閉鎖したので、貼っておきます。

    create table stringTable(
    col_a int,
    col_b char(1));

    insert into stringTable values
    (1,'a'),
    (1,'b'),
    (1,'c'),
    (2,'d'),
    (2,'e'),
    (2,'e');

    select col_a,
    array_to_string
    (array(select b.col_b
    from stringTable b
    where b.col_a = a.col_a
    order by b.col_b),',') as strAgg
    from stringTable a
    group by col_a;
    | 明智重蔵 | 2009/06/16 12:21 PM |
    ご丁寧にありがとうございますm(_ _)m
    | MeijiK | 2009/06/17 6:56 PM |









    http://blog.kimuradb.com/trackback/534552
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
    << October 2019 >>
    + RECOMMEND
    100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊
    100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊 (JUGEMレビュー »)

    100人のうちの一人としてミックさんの本を推薦しています。
    + RECOMMEND
    MySQL 5.1 Plugin Development
    MySQL 5.1 Plugin Development (JUGEMレビュー »)
    Andrew Hutchings,Sergei Golubchik
    MySQL 5.1 のプラグインを作るならこれ!
    + RECOMMEND
    AWKを256倍使うための本 (Ascii 256倍)
    AWKを256倍使うための本 (Ascii 256倍) (JUGEMレビュー »)
    志村 拓,鷲北 賢,西村 克信
    ここにきてまさかの復刊。15〜16年前の本ですが、いまでも十分役立ちますよ!!
    + RECOMMEND
    Linux-DB システム構築/運用入門 (DB Magazine SELECTION)
    Linux-DB システム構築/運用入門 (DB Magazine SELECTION) (JUGEMレビュー »)
    松信 嘉範
    Linux-DB システム構築の新スタンダード。DB Magazine人気連載、待望の書籍化です!!
    + RECOMMEND
    + RECOMMEND
    超・極める!MySQL
    超・極める!MySQL (JUGEMレビュー »)
    坂井 恵,志村 和彦,ひろせ まさあき,松信 嘉範
    内容は少々古くなりましたが、内部説明があり、いろいろ面白いです。
    + RECOMMEND
    The Root of .NET Framework
    The Root of .NET Framework (JUGEMレビュー »)
    荒井 省三
    .NETの根っこをつかむ、か?
    + RECOMMEND
    エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
    エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド (JUGEMレビュー »)
    奥野 幹也
    これまでにない構築、そして構築後のMySQLのための本。
    + RECOMMEND
    Database Management Systems
    Database Management Systems (JUGEMレビュー »)
    Raghu Ramakrishnan,Johannes Gehrke
    ミックさん連載の参考書籍です。
    + RECOMMEND
    Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series)
    Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series) (JUGEMレビュー »)
    W. Richard Stevens,Stephen A. Rago
    必読! といいつつ私が読んだのは初版の日本語訳です。差分はチェックしないといけませんね。
    + RECOMMEND
    + RECOMMEND
    + RECOMMEND
    Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE
    Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE (JUGEMレビュー »)

    DELL SX260の換装用に購入。今はコチラのほうが安いですね。
    + RECOMMEND
    情熱プログラマー ソフトウェア開発者の幸せな生き方
    情熱プログラマー ソフトウェア開発者の幸せな生き方 (JUGEMレビュー »)
    Chad Fowler
    OSC2010神戸に出展されたジュンク堂で買いました。
    + RECOMMEND
    Software Design 総集編 【2000~2009】(DVD付)
    Software Design 総集編 【2000~2009】(DVD付) (JUGEMレビュー »)

    メガトン級の過去記事。売り切れる前にお店に急げ!
    + RECOMMEND
    + RECOMMEND
    玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2
    玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2 (JUGEMレビュー »)

    Aspire 1410 HDD換装後、昔のHDDはこれにいれます。
    + RECOMMEND
    + RECOMMEND
    acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22
    acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22 (JUGEMレビュー »)

    色違い黒(他に青と白があります): メモリは最大4GBとあるが、がんばれば8GBいけるらしい。
    + RECOMMEND
    Firebird 徹底入門
    Firebird 徹底入門 (JUGEMレビュー »)
    木村 明治,はやし つとむ,坂井 恵
    Firebird日本ユーザ会のはやしさん、そしてMyNAから拝借(?) してきた坂井さんとともに書きました。まだ誰も知らないFirebird 2.5や、いままでドキュメントのなかったツール類についてもソースを確認してとりあげた本です。是非ご活用ください。
    + SELECTED ENTRIES
    + RECENT COMMENTS
    • [ミュージシャンに聴かせたい・弾かせたい!] (4) 山田元気様
      meijik (07/27)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      meijik (03/03)
    • 2019年の木村明治
      田中尚 (01/08)
    • 使い慣れたSQLに潜む実装依存: Firebirdの場合(6) 文字列との結合演算子
      noname (12/10)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      Moriaki_ (01/05)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      Moriaki_ (01/05)
    • 2015年版 InterBaseの歩み
      nakagami (12/06)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      meijik (11/22)
    • 分散DB本読書会第46回メモ「STOP AFTER 10」
      masudahidehiko (09/01)
    • Windows上でのMySQLビルド方法
      kinoyasu (03/31)
    + RECENT TRACKBACK
    + CATEGORIES
    + ARCHIVES
    + MOBILE
    qrcode
    + LINKS
    + PROFILE