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 <=3pagelinks.pl_namespace <=3. 要进行这样的比较,您需要定义一个顺序,并且这些字段之一可能不是标准的数字字段。或者整数与浮点可能存在一些问题——例如,如果“3.0 = 3”这个问题并不那么容易回答,因为 3.0 的浮点表示很可能不完全是 3。

一切都只是猜测,但我很确定这两个<=是你的问题。

于 2009-01-03T22:46:59.637 回答
0

好吧,我不知道您使用的架构 (*),但错误消息似乎很清楚。您的一列是RECORD类型,并且没有操作符来订购 RECORD。但是您的查询的某些部分(例如 <=)需要这样的排序操作符。使用 ORDER BY 不太可能有帮助,因为问题的症结在于缺少操作员来订购......

(*) 根据您的其他问题,我假设您的架构是http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz中的维基百科页面转储对吗?

于 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 回答