我有一个类似下面的查询:
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 [...]
答案 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函数与表中的其他列一起使用,请按列分组。 检查出来并评论是否有效