子查询使用来自外部查询的未分组列“omt.actualendtime”

Posted

技术标签:

【中文标题】子查询使用来自外部查询的未分组列“omt.actualendtime”【英文标题】:subquery uses ungrouped column "omt.actualendtime" from outer query 【发布时间】:2019-03-07 06:03:01 【问题描述】:

下面是查询

SELECT omt.actualendtime::date,
       (SELECT array_to_json(array_agg(row_to_json(t)))
        FROM (SELECT odt.productshortname,
                     count(odt.*) 
              FROM orderdetail_runtime_tran odt 
              WHERE odt.actualendtime::date = omt.actualendtime::date
                AND odt.stagename = 'Ironing'
              GROUP BY odt.productshortname
             ) t
       ) as item_current_count
From orderdetail_runtime_tran omt
WHERE omt.actualendtime IS NOT NULL AND date_part('year', omt.actualendtime) = '2019'
  AND omt.stagename = 'Ironing'
GROUP BY omt.actualendtime::date;

此查询出错

【问题讨论】:

Edit 您的问题并添加一些示例数据和预期结果。应该有一种更好、更简单的方法来完成您最终想要实现的目标,而不是修复该错误。 我不认为样本数据会产生影响,但表定义会有所帮助。 是的,两者都提供会更好。 【参考方案1】:

尝试使用子查询:

SELECT actualenddate,
       (SELECT array_to_json(array_agg(row_to_json(t)))
        FROM (SELECT odt.productshortname, count(odt.*) 
              FROM orderdetail_runtime_tran odt 
              WHERE odt.actualendtime::date = actualenddate AND
                    odt.stagename = 'Ironing'
              GROUP BY odt.productshortname
             ) t
       ) as item_current_count
FROM (SELECT omt.*,
             omt.actualendtime::date as actualenddate
      FROM orderdetail_runtime_tran omt
      WHERE omt.actualendtime IS NOT NULL AND 
            date_part('year', omt.actualendtime) = '2019' AND
            omt.stagename = 'Ironing'
     ) omt
GROUP BY actualenddate;

【讨论】:

以上是关于子查询使用来自外部查询的未分组列“omt.actualendtime”的主要内容,如果未能解决你的问题,请参考以下文章

在单个外部 SELECT 查询中使用来自 SELECT 子查询的两个聚合值

使用子查询按特定列分组输出相同的错误结果

来自 LeftJoin 的 MAX() 值的子查询

来自有条件和无条件列的 SQL 查询分组的比率或百分比

子查询

SQL语句汇总——聚合函数分组子查询及组合查询