0

2 番目に多くの異なる値を持つ属性 R:a を返すクエリがあるとします (テーブル名と属性名を返します)。私の仕事は次のとおりです。

同じ属性 R:a の個別の値ごとに、個別の値を val として返し、この値を持つ R 内のタプルの数を count として返します。R タプルの 20% の R:a 値が等しいかそれより低く、R タプルの 20% がそれより高いか等しい R:a 値を持つような、これらの異なる値の結果を表示します。

クエリができるだけ効率的に実行されるように、ストレージの変更を提案します。

個別の値とカウントを返すクエリを作成しましたが、結果の 20% を表示するにはどうすればよいでしょうか?また、このコンテキストでのストレージの変更は何を意味するのでしょうか?

SELECT pg_stats.tablename,pg_stats.attname,UNNEST(pg_stats.most_common_vals::text::varchar[]) as val, UNNEST(pg_stats.most_common_freqs)*pg_class.reltuples as count
FROM information_schema.columns,pg_stats,pg_class, 

( SELECT T.tablename,T.attname
FROM (
SELECT pg_stats.tablename, pg_stats.attname, pg_stats.n_distinct as distval
FROM information_schema.columns,pg_stats
WHERE pg_stats.tablename = table_name AND pg_stats.attname = column_name AND (NOT (information_schema.columns.table_schema LIKE 'pg_%' OR information_schema.columns.table_schema = 'information_schema')) AND (information_schema.columns.data_type ='character varying') AND (table_name NOT in (SELECT viewname FROM pg_views))
LIMIT 5) as T
ORDER by T.distval DESC limit 1 offset 1) as temp 


WHERE (pg_stats.tablename = table_name AND pg_stats.attname = column_name AND (NOT 
(information_schema.columns.table_schema LIKE 'pg_%' OR 
information_schema.columns.table_schema 
  = 'information_schema')) AND (information_schema.columns.data_type ='character varying') AND 
  (table_name NOT in (SELECT viewname FROM pg_views))
  AND pg_stats.tablename = relname AND temp.tablename = pg_stats.tablename AND temp.attname = 
  pg_stats.attname);
4

0 に答える 0