Oracle SQL—;将聚合函数与分析函数分组?
我的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
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。谢谢