Dividing SUM By A Distinct Count and getting an error
我在以下查询中收到 ORA-00937(不是按功能分组的单组)。请问有什么想法吗?查询只是将 SUM 除以 Count。
1
2 3 4 5 |
SELECT SUM(DISTINCT CE.USD_NOTIONAL)/(SELECT COUNT(DISTINCT MARKET_DATE) FROM DATA_EURO_YTD WHERE MARKET_DATE >= TO_DATE(‘2019-01-01’,‘YYYY-MM-DD’))
FROM CE WHERE CE.tradedate >= ’01-JAN-2019′ AND CE.exchange IN (SELECT DISTINCT EXCHANGE FROM exchange EX WHERE EX.FEED IN (‘Y’)) |
- 那是很多DISTINCT。这背后的原因是什么?这些表实际上包含什么?他们的钥匙是什么?查询可能写得更简单,但我们需要更多信息才能给出好的建议。
将子查询移动到 FROM 子句:
1
2 3 4 5 6 7 8 9 10 11 |
SELECT SUM(DISTINCT CE.USD_NOTIONAL) / MAX(dey.cntd)
FROM CE CROSS JOIN (SELECT COUNT(DISTINCT MARKET_DATE) AS cntd FROM DATA_EURO_YTD WHERE MARKET_DATE >= DATE ‘2019-01-01’ ) dey WHERE CE.tradedate >= DATE ‘2019-01-01’ AND CE.exchange IN (SELECT EXCHANGE FROM exchange EX WHERE EX.FEED IN (‘Y’) ); |
注意事项:
- 将子查询移到 FROM 子句几乎可以解决整个问题。您仍然需要围绕该值进行聚合。
- SELECT DISTINCT 在 IN 子查询中是多余的。
- 我修复了日期以使用日期文字的 DATE 前缀。
- 很抱歉不清楚为什么我的子查询不起作用。您能否对此有所了解,以便我更好地理解。
- 在 subuery 中,我得到一个计数,基本上是一个值。所以不确定 MAX 是如何解决问题或将子查询移动到 FROM 的?
- @AM_86 。 . . GROUP BY 是不允许的。聚合查询的 SELECT 中的所有表达式都需要是聚合键或聚合函数的参数。尽管您的 GROUP BY 在技术上可能符合条件,但 SQL 引擎很难弄清楚这一点。
来源:https://www.codenong.com/58863436/