同様のエントリを統合することによって、驚くべきサイズになっているテーブルのサイズを縮小する方法を見つけようとしています。私は、私が望むようにデータをロールアップする作業のGroup Byクエリを得ました。既存のエントリを削除し、そのselect文に基づいて新しいエントリを挿入する方法がわかりません。私は、最も直接的なアプローチがselectを実行し、その結果をメモリに保存し、テーブルエントリを削除してから、統合エントリを挿入すると仮定します。しかし、それは非効率的で、多量のメモリを使用して、おそらくいくつかのSQLマジックを実行し、これをすべて一度に行う方法があることを望みます。SQLグループ既存の行、削除、およびグループによる結果の挿入
これは選択」によってグループの私です:
select SUM(user_in),
SUM(user_out),
SUM(user_total),
name,
device_type,
device_os,
ownership,
host_name
FROM user_usage
GROUP BY name,
device_type,
device_os,
ownership,
host_name;
をありがとう!非常に効率的でありながら、誰が今までこのような何かにぶつかる場合
は、この機能は統合を実現:
CREATE OR REPLACE FUNCTION consolidate_user_bandwidths(
IN _tbl REGCLASS,
IN _savetime TIMESTAMP
) RETURNS void AS
$BODY$
BEGIN
EXECUTE 'CREATE TEMP TABLE user_bandwidths_temp ON COMMIT DROP AS
SELECT MAX(id) AS id, SUM(bandwidth_in) AS bandwidth_in,
SUM(bandwidth_out) AS bandwidth_out,
'''|| _savetime ||'''::timestamp AS created_at,
SUM(bandwidth_total) AS bandwidth_total, name,
device_type, device_os,
ownership, host_name
FROM '|| _tbl ||'
GROUP BY name, device_type,
device_os, ownership, host_name';
EXECUTE 'TRUNCATE TABLE '|| _tbl ||'';
EXECUTE 'INSERT INTO '|| _tbl ||' SELECT * FROM user_bandwidths_temp';
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
RDBMとは何ですか? –
不要な重複がたくさんある場合は、user_usageテーブル – SpacePhoenix
テーブルスキーマにエントリを追加するコードのロジックを調べる必要があります。 – McNets