关于 sql:Dividing SUM By A Distinct Count 报错 | 珊瑚贝

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/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9395.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?