【问题标题】:data function grouped item in a subquery子查询中的数据函数分组项
【发布时间】:2016-02-18 17:08:13
【问题描述】:

我正在使用Postgresql 编写一个查询,该查询每天计算差异值的总和并从其他表il_costs 获取单价,这是我尝试通过子查询实现的。在整个查询下方:

SELECT date(read.readed_at), 
       SUM(read.diff), 
       (SELECT water_unit 
        FROM il_costs 
        WHERE EXTRACT(MONTH FROM created_at) = EXTRACT(MONTH FROM date(read.readed_at)) 
          AND EXTRACT(YEAR FROM created_at) = EXTRACT(YEAR FROM date(read.readed_at))) 
FROM il_communicators_readings read 
GROUP BY date(read.readed_at) 
ORDER BY date(read.readed_at) ASC;

我收到关于未分组列的错误,但我也在分组函数中使用date(read.readed_at)

ERROR: subquery uses ungrouped column "read.readed_at" from outer query
LINE 1: ...(MONTH FROM created_at) = EXTRACT(MONTH FROM date(read.reade...

【问题讨论】:

  • 通用 GROUP BY 规则:“如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或者是一个集合函数的参数。”

标签: sql postgresql group-by


【解决方案1】:

您可以尝试将您的查询用作子查询并在外部查询中执行相关子查询:

SELECT mydate, s_diff,
       (SELECT water_unit 
        FROM il_costs 
        WHERE EXTRACT(MONTH FROM created_at) = EXTRACT(MONTH FROM mydate) 
          AND EXTRACT(YEAR FROM created_at) = EXTRACT(YEAR FROM mydate)) 
FROM (
  SELECT date(read.readed_at) AS mydate, 
         SUM(read.diff) as s_diff
  FROM il_communicators_readings read 
  GROUP BY date(read.readed_at) ) AS t
ORDER BY mydate ASC;

【讨论】:

    【解决方案2】:

    问题不是read.readed_at,是子查询不在group by中。而且我认为使用这样的子查询不是一个好主意。

    试试这个:

    SELECT date(read.readed_at), 
       SUM(read.diff), 
       costs.water_unit
    FROM il_communicators_readings read 
    Left Join il_costs costs
    ON EXTRACT(MONTH FROM costs.created_at) = EXTRACT(MONTH FROM date(read.readed_at)) 
    AND EXTRACT(YEAR FROM costs.created_at) = EXTRACT(YEAR FROM date(read.readed_at))
    GROUP BY date(read.readed_at),costs.water_unit
    ORDER BY date(read.readed_at) ASC;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-06
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      相关资源
      最近更新 更多