2

このSQLコマンドを実行しようとしています:

SELECT page.page_namespace, pagelinks.pl_namespace, COUNT(*) 
    FROM page, pagelinks
    WHERE 
        (page.page_namespace <=3 OR page.page_namespace = 12 
            OR page.page_namespace = 13
        ) 
        AND 
        (pagelinks.pl_namespace <=3 OR pagelinks.pl_namespace = 12 
            OR pagelinks.pl_namespace = 13
        )
        AND 
        (page.page_is_redirect = 0)
        AND 
        pagelinks.pl_from = page.page_id 
    GROUP BY (page.page_namespace, pagelinks.pl_namespace) 
; 

そうすると、次のエラーが表示されます。

    ERROR:  could not identify an ordering operator for type record
    HINT:  Use an explicit ordering operator or modify the query.

    ********** Error **********

    ERROR: could not identify an ordering operator for type record
    SQL state: 42883
    Hint: Use an explicit ordering operator or modify the query.

クエリの最後にORDER BY (page.page_namespace, pagelinks.pl_namespace) ASCを追加しようとしましたが、成功しませんでした。

アップデート:

私もこれを試しました:

SELECT page.page_namespace, pagelinks.pl_namespace, COUNT(*) 
    FROM page, pagelinks
    WHERE pagelinks.pl_from = page.page_id 
    GROUP BY (page.page_namespace, pagelinks.pl_namespace) 
; 

しかし、私はまだ同じエラーが発生します。

どうも

4

4 に答える 4

12

私はドキュメントを確認していませんが、GROUP BY式が括弧で囲まれているという事実は私には珍しいようです. ここで括弧を使用しないとどうなりますか?

于 2009-01-03T23:01:38.030 に答える
0

私は実際には専門家ではありませんが、そのメッセージについての私の理解では、PostgreSQL は と のどちらも処理できないことに不満を抱いているということpage.page_namespace <=3ですpagelinks.pl_namespace <=3。このような比較を行うには、順序を定義する必要があり、これらのフィールドの 1 つが標準の数値フィールドではない可能性があります。または、整数と浮動小数点に問題がある可能性があります。たとえば、「3.0 = 3」という質問は、3.0 の浮動小数点表現が正確に 3 ではない可能性が高いため、答えるのがそれほど簡単ではありません。

すべて当て推量ですが、これら 2 つ<=の問題が問題であると確信しています。

于 2009-01-03T22:46:59.637 に答える
0

ええと、あなたが使用しているスキーマ (*) はわかりませんが、エラー メッセージは明らかなようです。列の 1 つは RECORD 型であり、 RECORDを並べ替える演算子はありません。ただし、<= などのクエリの一部の部分には、そのような並べ替え演算子が必要です。問題の核心は注文する演算子の欠如であるため、ORDER BY を使用しても解決しない可能性があります...

(*) 他の質問から、あなたのスキーマはhttp://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gzの Wikipedia ページ ダンプだと思います。

于 2009-01-03T22:51:51.797 に答える
-1

私はいくつかのエラーがあります。しかし、私はこのページ、 http://www.w3schools.com/sql/sql_groupby.aspを見つけました。 簡単です。たとえば、括弧なしでグループ化する必要があります。

GROUP BY (page.page_namespace, pagelinks.pl_namespace) 正しいは GROUP BY page.page_namespace, pagelinks.pl_namespace

ご挨拶!!

于 2012-01-04T15:46:28.623 に答える