Sql 聚合函数和OrderBy

Sql 聚合函数和OrderBy,sql,postgresql,aggregate-functions,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) = SUBS

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

  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
我得到以下错误:

错误:“案件登记人。案件登记人”列必须出现在GROUP by子句中,或用于聚合功能行1:选择案件登记人、办公室代码、设计代码、法院代码、法院[…]

您正在使用一个聚合函数
COUNT()
,以及一些不属于
分组依据(因为没有)或聚合函数(除了
office\u code
)中的字段

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

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


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

添加一个如下的GROUPBY子句

“按案件提交人、办公室代码、设计代码、法院代码、法院案件编号分组”

现在试试例外,它会起作用的。 简单的逻辑是,如果要将aggreagate函数与表中的其他列一起使用,请按该列分组。
检查并注释如果有效

正如您在注释中所述,您实际上希望在结果集中的单独字段中显示所选行数

您可以通过对count和join这两个查询使用subselect来实现这一点

大概是这样的:

  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

我无法测试该查询,但它应该可以运行,或者至少可以为您指出正确的方向。

为什么您认为它有问题?出现这样的错误..错误:列“注册案例。案例存档者”必须出现在GROUP by子句中,或者在聚合函数行中使用1:选择案例存档者,办公室代码,设计代码,法院代码,法院…什么版本的PostgreSQL?AKAIK,9.1+应该支持此功能,但不支持以前的版本。您正在使用
COUNT()
。。。因此,您需要使用
groupby
对条目进行分组。检查版本为PostgreSQL8.4此时计数始终为1。我希望获取所选行的总数。如果您希望计数()中的行总数,则每行的计数都相同。。可以吗?你能解释一下你的业务逻辑吗,这样我就可以帮你了。我想要每一行的总计数。如果每一行的总计数相同,这不是问题。我想要得到这个计数,作为标签显示,就像找到的总行数。所有其他的东西作为搜索结果