sql >> データベース >  >> RDS >> PostgreSQL

クエリ結果を個別の列に分割するにはどうすればよいですか?

    これが多次元配列を使用したやや賢明なアプローチ です。 。

    次のクエリは絶対に使用しないでください。

    CREATE EXTENSION tablefunc;
    
    SELECT * FROM crosstab(
      'SELECT ''row1''::text, width_bucket(x, 1, 53001, 100), array_agg(x order by x)::integer[] from generate_series(1,53000) x GROUP BY 2'
    ) ct(
     rowname text,
        col1 integer[], col2 integer[], col3 integer[], col4 integer[], col5
        integer[], col6 integer[], col7 integer[], col8 integer[], col9 integer[],
        col10 integer[], col11 integer[], col12 integer[], col13 integer[], col14
        integer[], col15 integer[], col16 integer[], col17 integer[], col18 integer[],
        col19 integer[], col20 integer[], col21 integer[], col22 integer[], col23
        integer[], col24 integer[], col25 integer[], col26 integer[], col27 integer[],
        col28 integer[], col29 integer[], col30 integer[], col31 integer[], col32
        integer[], col33 integer[], col34 integer[], col35 integer[], col36 integer[],
        col37 integer[], col38 integer[], col39 integer[], col40 integer[], col41
        integer[], col42 integer[], col43 integer[], col44 integer[], col45 integer[],
        col46 integer[], col47 integer[], col48 integer[], col49 integer[], col50
        integer[], col51 integer[], col52 integer[], col53 integer[], col54 integer[],
        col55 integer[], col56 integer[], col57 integer[], col58 integer[], col59
        integer[], col60 integer[], col61 integer[], col62 integer[], col63 integer[],
        col64 integer[], col65 integer[], col66 integer[], col67 integer[], col68
        integer[], col69 integer[], col70 integer[], col71 integer[], col72 integer[],
        col73 integer[], col74 integer[], col75 integer[], col76 integer[], col77
        integer[], col78 integer[], col79 integer[], col80 integer[], col81 integer[],
        col82 integer[], col83 integer[], col84 integer[], col85 integer[], col86
        integer[], col87 integer[], col88 integer[], col89 integer[], col90 integer[],
        col91 integer[], col92 integer[], col93 integer[], col94 integer[], col95
        integer[], col96 integer[], col97 integer[], col98 integer[], col99 integer[],
        col100 integer[]
    );
    

    この問題を解決する正しい方法は、ほぼ確実にアプリケーション内です。 。 SQLは多くの点で優れています。これはそれらの1つではありません。特に、ピボットのサポートが非常に限られているPostgreSQLではそうです。どのデータベースでも、これはおかしなことです。

    私に関する限り、列リストを生成するためだけにクエリを使用する必要がある場合、それはシステムが適切ではないことを強制されていることを示しています。

    select string_agg('col'||n||' integer[]',', ') FROM generate_series(1,100) n;
    



    1. SQLクエリはPL/SQLで機能しますが、VisualStudioでは機能しません

    2. AWS RDSでのMySQLからPostgreSQLへの移行、パート1

    3. MySQLブール値tinyint(1)は127までの値を保持しますか?

    4. トリガー内で例外を発生させる方法は?これを行う方法はありますか?