Вопрос

Я пытаюсь выполнить эту 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.

Я пробовал добавлять : УПОРЯДОЧИТЬ ПО (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) 
; 

Но я все равно получаю ту же ошибку.

Спасибо

Это было полезно?

Решение

Я не проверял никакой документации, но тот факт, что у вас есть ваш GROUP BY выражение в круглых скобках выглядит для меня необычно.Что произойдет, если вы не будете использовать здесь круглые скобки?

Другие советы

Я на самом деле не эксперт, но мое понимание этого сообщения заключается в том, что PostgreSQL жалуется на то, что не может обработать ни то, ни другое page.page_namespace <=3 или pagelinks.pl_namespace <=3.Чтобы провести подобное сравнение, вам нужно определить порядок, и, возможно, одно из этих полей не является стандартным числовым полем.Или, может быть, есть какая-то проблема с целым числом противплавающая точка - напримерна вопрос, если "3.0 = 3", на самом деле не так просто ответить, поскольку представление 3.0 с плавающей запятой, скорее всего, не точно равно 3.

Все это только догадки, но я почти уверен, что эти двое <=s - это ваша проблема.

Ну, я не знаю схему (*), которую вы используете, но сообщение об ошибке кажется ясным.Один из ваших столбцов имеет тип ЗАПИСЬ и нет оператора для заказа ЗАПИСИ.Но некоторые части вашего запроса, такие как <= требуется такой оператор упорядочивания.Использование ORDER BY вряд ли поможет, поскольку суть проблемы заключается в отсутствии оператора для оформления заказа...

(*) Исходя из ваших других вопросов, я предполагаю, что ваша схема представляет собой дамп страницы Википедии в http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz Правильно?

у меня какая-то ошибка.но я нашел эту страницу, http://www.w3schools.com/sql/sql_groupby.asp это просто, вы должны группировать без скобок например:

ГРУППИРОВАТЬ ПО (page.page_namespace, pagelinks.pl_namespace) правильно будет ГРУППИРОВАТЬ ПО page.page_namespace, pagelinks.pl_namespace

приветствую вас!!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top