sql - select and join 错误必须出现在 GROUP BY 子句中或在聚合函数中使用

标签 sql postgresql postgresql-9.1

我正在尝试这样做:

SELECT *,
case when SUM(fld_allocated_time) / 24 < fld_allocated_days 
then 'OK'
else 'NOK' 
end as Alocated
from
(
SELECT tbl_project.fld_id, tbl_project.fld_allocated_days, 
tbl_project_timesheet.fld_allocated_time 
FROM "SD_PRJ".tbl_project
INNER JOIN "SD_PRJ".tbl_project_timesheet
ON tbl_project.fld_id=tbl_project_timesheet.fld_id
) AS Alias

我得到这个错误:

ERROR: column "total.fld_id" must appear in the GROUP BY clause or be used in an aggregate function
SQL state: 42803
Character: 8

tbl = 表格
fld = 列
SD_PRJ = 架构名称

最佳答案

如果您想为查询的所有行计算一个总和,并将其与每一行中的 fld_allocated_days 进行比较,那么您可以试试这个:

with Alias as (
SELECT * from (
    SELECT tbl_project.fld_id, tbl_project.fld_allocated_days, 
           tbl_project_timesheet.fld_allocated_time 
    FROM "SD_PRJ".tbl_project
         INNER JOIN "SD_PRJ".tbl_project_timesheet
         ON tbl_project.fld_id=tbl_project_timesheet.fld_id
)
select a.*, 
       case when b.sm < fld_allocated_days then 'OK' else 'NOK' end as Alocated
from Alias a cross join
    (select SUM(fld_allocated_time) / 24 sm from Alias) b;

不过,我想你需要这样的东西:

SELECT tbl_project.fld_id,
       case when SUM(tbl_project_timesheet.fld_allocated_time) / 24 
                 < fld_allocated_days 
            then 'OK' 
            else 'NOK' 
       end as Alocated
FROM "SD_PRJ".tbl_project
     INNER JOIN "SD_PRJ".tbl_project_timesheet
     ON tbl_project.fld_id=tbl_project_timesheet.fld_id
GROUP BY tbl_project.fld_id, tbl_project.fld_allocated_days;

关于sql - select and join 错误必须出现在 GROUP BY 子句中或在聚合函数中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26743984/

相关文章:

sql - 如何使用 'DAY' 与 'd' 在 Access 中添加()

entity-framework-4 - 如何通过连接使用Entity Framework + PostgreSQL?

mysql - 从其他表中选择列但应返回多行

postgresql - 在 CentOS 6 中安装/激活 pgsql.so 扩展

postgresql - 从 select 语句中调用返回值

ruby-on-rails - Rails 5 如何保存 postgres 中两个日期时间之间的小时和分钟差异?

postgresql - 将没有长独占锁的表中的整型键更改为bigint键

sql - PostgreSQL 日期差异

sql - VBA Excel - 通过 ADO 的 SQL 查询返回无限的空记录集

MySQL - 从另一个表中为 WHERE 子句选择数据