Oracle SQL - 使用分析函数对聚合函数进行分组?

时间:2016-05-29 09:16:53

标签: sql oracle

我有这样的SQL:

SELECT
  TO_CHAR(dateinvoiced, 'YYYY') AS year,
  TO_CHAR(dateinvoiced, 'MM') AS month,      
  name,
  SUM(reste) OVER (PARTITION BY name, ad_org_id) AS tot_reste_client,
  nameregion AS region
FROM
  table
GROUP BY
  TO_CHAR(dateinvoiced, 'YYYY'),
  TO_CHAR(dateinvoiced, 'MM'),      
  name,
  nameregion
ORDER BY name;

我试着把它放在GROUP BY子句中,我得到这样的错误"不是组功能",尝试使用HAVING并告诉我"这里不允许使用窗口函数&# 34。

无法找到解决方案?我正在使用Oracle 12。

1 个答案:

答案 0 :(得分:2)

分析函数在 GROUP BY / HAVING之后计算,因此通常可以将聚合添加到reste

SELECT
  TO_CHAR(dateinvoiced, 'YYYY') AS year,
  TO_CHAR(dateinvoiced, 'MM') AS month,      
  name,
  SUM(SUM(reste)) OVER (PARTITION BY name, ad_org_id) AS tot_reste_client,
  nameregion AS region
FROM
  table
GROUP BY
  TO_CHAR(dateinvoiced, 'YYYY'),
  TO_CHAR(dateinvoiced, 'MM'),      
  name,
  nameregion
ORDER BY name;

但是由于ad_org_id而不是GROUP BY,这也应该失败,也许你可以使用MIN(ad_org_id)