Pergunta

Eu estou tentando executar este comando 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) 
; 

Quando eu fizer isso, eu recebo o seguinte erro:

    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.

Eu tentei adicionar: ORDER BY (page.page_namespace, pagelinks.pl_namespace) ASC para o fim da consulta sem sucesso.

UPDATE:

Eu também tentei isso:

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) 
; 

Mas eu ainda obter o mesmo erro.

Thx

Foi útil?

Solução

Eu não tenho verificado qualquer documentação, mas o fato de que você tem a sua expressão GROUP BY entre parênteses parece incomum para mim. O que acontece se você não usar parênteses aqui?

Outras dicas

Eu não sou realmente um especialista, mas o meu entendimento de que a mensagem é que PostgreSQL Compains sobre não ser capaz de lidar com qualquer page.page_namespace <=3 ou pagelinks.pl_namespace <=3. Para fazer uma comparação como o que você precisa ter uma ordem definida e talvez um desses campos não é um campo numérico padrão. Ou talvez haja algum problema com o ponto inteiro vs. flutuante - por exemplo, a pergunta se "3.0 = 3" não é realmente fácil de responder uma vez que a representação de ponto flutuante de 3,0 é mais provável não exatamente 3.

Todos apenas suposições, mas eu tenho certeza que esses dois <=s são o seu problema.

Bem, eu não sei o esquema (*) que você usa, mas a mensagem de erro parece claro. Uma de suas colunas é do tipo REGISTRO e não há operador a fim RECORD.But algumas partes de sua consulta como <= requer tal operador de ordenação. Usando ORDER BY é improvável que ajuda uma vez que o cerne do problema é a falta de um operador para a ordem ...

(*) A partir de suas outras perguntas, eu assumo o seu esquema é Wikipedia página despejo em http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz correta?

i tem algum erro. mas eu encontrei esta página, http://www.w3schools.com/sql/sql_groupby.asp é fácil, você deve agrupar sem colchetes por exemplo:

GROUP BY (page.page_namespace, pagelinks.pl_namespace) os está correto GROUP BY page.page_namespace, pagelinks.pl_namespace

saudações !!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top