聚合函数和OrderBy

时间:2011-11-09 05:17:53

标签: sql postgresql aggregate-functions

我有一个类似下面的查询:

  SELECT case_filed_by,
         office_code,
         desg_code, 
         court_code,
         court_case_no,
         COUNT(office_code) as count 
    FROM registration_of_case 
   WHERE TRUE 
     AND SUBSTR(office_code, 1, 0) = SUBSTR('', 1, 0) 
ORDER BY court_code, court_case_no

我收到以下错误:

  

错误:列“registration_of_case.case_filed_by”必须出现在GROUP BY子句中或用于聚合函数LINE 1:SELECT case_filed_by,office_code,desg_code,court_code,court [...]

3 个答案:

答案 0 :(得分:2)

正如您在评论中所描述的那样,您实际上想要在结果集的单独字段中选择行数。

您可以通过使用count的子选择和连接这两个查询来实现此目的。

这样的事情:

  SELECT case_filed_by,
         office_code,
         desg_code, 
         court_code,
         court_case_no,
         office_code_count 
    FROM registration_of_case,
         (SELECT COUNT(office_code) AS office_code_count 
            FROM registration_of_case 
           WHERE TRUE 
             AND SUBSTR(office_code, 1, 0) = SUBSTR('', 1, 0)
         ) AS count_query
   WHERE TRUE 
     AND SUBSTR(office_code, 1, 0) = SUBSTR('', 1, 0) 
ORDER BY court_code, court_case_no

我无法测试查询,但它应该起作用或者至少指向正确的方向。

答案 1 :(得分:1)

您正在使用COUNT()这是一个聚合函数,以及一些不属于GROUP BY(因为没有)或聚合函数({{{ 1}})。

现在,在MySQL中允许使用类似的东西,因为引擎会从组中选择一条记录并返回(尽管查询不会以任何方式影响它,这通常是可以的)。 Postgresql显然不能。我不使用Postgresql,我可以解决它。

如果Postgresql有“非严格”模式,我建议你启用它;否则,请更正您的查询或更改数据库类型。

如果我知道Postgresql的功能,我会建议一个合适的查询,但不允许。

答案 2 :(得分:0)

像这样添加group by子句,

“group by case_filed_by,office_code,desg_code,court_code,court_case_no”

现在尝试一下,它会起作用。 简单的逻辑是,如果要将aggreagate函数与表中的其他列一起使用,请按列分组。 检查出来并评论是否有效