Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL—;将聚合函数与分析函数分组?_Sql_Oracle - Fatal编程技术网

Oracle SQL—;将聚合函数与分析函数分组?

Oracle SQL—;将聚合函数与分析函数分组?,sql,oracle,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

我的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;
我试着把它放在GROUPBY子句中,我得到这样的错误“不是组函数”,试着使用HAVING,它告诉我“这里不允许使用窗口函数”


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

分析函数是在按/have分组后计算的,因此通常可以将聚合添加到
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\u org\u id
,它不在GROUP BY中,也许您可以使用
MIN(ad\u org\u id)
,分析函数在GROUP BY/have之后计算,所以通常您可以将聚合添加到
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\u org\u id
,它不在GROUP BY中,也许您可以使用
MIN(ad\u org\u id)

使用子查询,SUM(reste)OVER(PARTITION BY name,ad\u org\u id)FROM tUse a subquery,SUM(reste)OVER(PARTITION BY name,ad\u org\u id)FROM tStill给出相同的错误“ORA-00979:not a GROUP BY expression”@IsmailSensei:如果你使用
MIN(ad_org\u id)
(或者将
ad_org\u id
添加到GROUP BY)不会有错误,但我不知道这是否是你想要的。问题是我忘记了ad_org\u id,我没有使用MIN,我只是将ad_org\u id添加到GROUP BY。谢谢。仍然给出相同的错误“ORA-00979:不是一个分组方式表达式”@IsmailSensei:如果你使用
MIN(ad\u org\u id)
(或者将
ad\u org\u id
添加到分组方式),将不会有错误,但我不知道这是否是你想要的。问题是我忘记了ad\u org\u id,我没有使用MIN,我只是通过添加了ad\u org\u id。谢谢