2016-04-07 31 views
-2

私が実行し、次のSQLクエリを持っています。SQLクエリエラー(スキップ・レベルの相関と相関サブクエリがサポートされていない)

のVisual CでコンパイルのPostgreSQL 9.5.1、++、64ビット

を1800を構築します

しかしでない

のPostgreSQL 8.2.15(Greenplumはデータベース4.3.5.4ビルド1)のGCCのgccでコンパイルx86_64版 - 未知のlinux-gnuの、上(GCC)4.4.2

SELECT id, 
(SELECT AVG(dur) 
    FROM data t 
    WHERE t.id = t1.id AND 
     t.id IN (SELECT id 
        FROM data t2 
        WHERE t2.id = t1.id 
        ORDER BY dur 
        DESC LIMIT 10)) as avgdur 
FROM data t1 
WHERE t1.b<10000 
ORDER BY avgdur 
DESC LIMIT 1; 

私は次のエラーを取得する: ERROR:スキップレベルの相関と相関サブクエリがサポートされていません(subselect.c:394)

は、どのように私は、クエリを変更する必要がありますか?

+0

こちらのリンクをご覧ください。 http://stackoverflow.com/questions/426221/postgresql-correlated-sub-query-fail – Bharat

+0

'where t2.id = t1.id))as avgdur' - >>' WHERE t2.id = t.id) )as avgdur'しかし、クエリはおそらく単純化することができます。 – joop

答えて

0

WHERE t2.id = t1.idに問題があります。サブクエリでは、上位レベルではなく上位レベルでクエリを使用できます。

  1. T1
  2. トン
  3. T2

あなたは "T2のサブクエリ" からトンを使用することができます(t2がFROM句にあるクエリ)あなた:だからここにあなたは3つのレベルを持っていますtサブクエリでt1を使用できます。しかし、 "t2サブクエリ"からt1を使用することはできません。

WHERE t2.id = t.id)) as avgdurを使用することができます。ここ

一部に関する情報:あなたは、単に別の方法で、グループをやろうとしているようhttp://www.greenplumdba.com/correlated-subqueries-csqs-in-greenplum

0

が私に見える...

SELECT id, AVG(dur) as avgdur 
FROM data t1 
WHERE t1.b<10000 
GROUP BY id 
ORDER BY avgdur 
DESC LIMIT 1; 
+0

はい、私はもっと多くのことをしなければならない、私はちょうど質問を簡略化した、私は5最大要素の平均が最大であるidを見つける必要があります – ivankiss

+1

あなたは少しあまり単純化したようです – jarlh

0

ピボタルクエリオプティマイザ(4.3.5で利用可能)は、複数レベルの相関関係を持つクエリをサポートしています。 Pivotal Query Optimizerを有効にするには、次のコマンドを実行します。

set optimizer = on;

最新のGPDBバージョン4.3.8にアップグレードすることをお勧めします。これにはいくつかの改善とバグ修正があります。

これが役立つ場合はお知らせください。

関連する問題