Pregunta

Estoy tratando de ejecutar 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) 
; 

Cuando lo hago, aparece el siguiente error:

    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.

He intentado agregar: ORDER BY (page.page_namespace, pagelinks.pl_namespace) ASC al final de la consulta sin éxito.

ACTUALIZACIÓN:

También probé esto:

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

Pero sigo teniendo el mismo error.

Thx

¿Fue útil?

Solución

No he verificado ninguna documentación, pero el hecho de que tenga su GROUP BY expresión entre paréntesis me parece inusual. ¿Qué sucede si no usas paréntesis aquí?

Otros consejos

No soy realmente un experto, pero entiendo ese mensaje es que PostgreSQL se compara con no poder manejar page.page_namespace <=3 o pagelinks.pl_namespace <=3. Para hacer una comparación como esa, necesita tener un orden definido y quizás uno de estos campos no sea un campo numérico estándar. O tal vez hay algún problema con el número entero frente al punto flotante, p. la pregunta si " 3.0 = 3 " en realidad no es tan fácil de responder ya que la representación de punto flotante de 3.0 probablemente no sea exactamente 3.

Todo son conjeturas, pero estoy bastante seguro de que esos dos <= s son tu problema.

Bueno, no sé el esquema (*) que usa, pero el mensaje de error parece claro. Una de sus columnas es de tipo RECORD y no hay operador para ordenar RECORD. Pero algunas partes de su consulta, como < = requiere dicho operador de pedido. Es improbable que el uso de ORDER BY ayude, ya que el problema es la falta de un operador para ordenar ...

(*) De sus otras preguntas, supongo que su esquema es el volcado de la página de Wikipedia en http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz ¿Correcto?

tengo algún error. pero encontré esta página http://www.w3schools.com/sql/sql_groupby.asp es fácil, debes agrupar sin paréntesis por ejemplo:

GROUP BY (page.page_namespace, pagelinks.pl_namespace) lo correcto es  GROUP BY page.page_namespace, pagelinks.pl_namespace

saludos !!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top