SQL 子查询上的左外连接
SQL Left Outer Join on Subquery
我正在尝试构建一个包含左连接子查询的查询 - 基于我在 中学到的原则 - 它应该从两个不同的 table 中提取相似的数据集。目标是通过 account || platform
比较体积数据,以确保从另一个 table 创建一个的存储过程正确执行。
思路是这样的:
Account || Product || T1Vol || T2Vol
abc AT 10 10
def RT 20 25
ghi OB 30
所以在这个例子中,想法是从 T1(table 程序作用)中提取所有账户和产品,从 T2(新创建的 table)中提取所有账户和产品有匹配项的地方(因此,Left Join on T1 = T2)。 (理想情况下,一切都将完美匹配,T1 与 T2 vol 没有差异,T2 volume 也没有空值)。
我编写了以下查询来完成此操作,但效果不佳。我得到的当前错误是 not a GROUP BY expression
- 我认为这不是 真正的问题 。我一直在搜索和迭代无济于事。
查询如下。 (为了与示例保持一致,T1 = OpStats
和 T2 = RegSplits
。非常感谢任何帮助。
SELECT DTA.trading_code Account, OpStats.product_dwkey Platform, SUM(OpStats.risk_amount_adj)/1000000 OpStatsVol, RegSplits.Volume RegSplitsVol
FROM fact_trade_presplit_rollup OpStats
INNER JOIN dim_trading_accounts DTA ON OpStats.trading_dwkey=DTA.trading_dwkey
LEFT OUTER JOIN
( SELECT b.trading_Code Account, a.product_dwkey Platform, SUM(a.risk_amount_adj)/1000000 Volume
FROM fact_trade_rollup a
INNER JOIN dim_trading_accounts b on a.trading_dwkey=b.trading_dwkey
WHERE a.account_type IN('Customer','Taker')
AND a.date_key>='01-JAN-16'
AND a.date_key<='31-MAR-16'
AND a.daily_db_metric NOT IN ('Manual Treasury Volume ($B)', 'Manual Volume ($B)', 'HSBC-WL POMS (Internal) Volume ($B)','JPMC-WL Order Book (Internal) Volume ($B)')
AND (a.product_dwkey IN('RT','HWL') AND a.source_name<>'STP')
GROUP BY b.trading_code, a.product_dwkey ) RegSplits
ON (DTA.trading_code = RegSplits.Account) /* is it because I am trying to join DTA to the subquery */
WHERE OpStats.account_type IN('Customer','Taker')
AND OpStats.date_key>='01-JAN-16'
AND OpStats.date_key<='31-MAR-16'
AND OpStats.daily_db_metric NOT IN ('Manual Treasury Volume ($B)', 'Manual Volume ($B)', 'HSBC-WL POMS (Internal) Volume ($B)','JPMC-WL Order Book (Internal) Volume ($B)')
AND (OpStats.product_dwkey IN('RT','HWL') AND OpStats.source_name<>'STP')
GROUP BY DTA.trading_code, OpStats.product_dwkey;
"Not group by expression" 错误很容易检查。
只需将 SELECT 表达式与 GROUP BY 表达式进行比较:
SELECT DTA.trading_code Account,
OpStats.product_dwkey Platform,
SUM(OpStats.risk_amount_adj)/1000000 OpStatsVol,
RegSplits.Volume RegSplitsVol
FROM ......
......
GROUP BY DTA.trading_code,
OpStats.product_dwkey;
SELECT 中有两个元素不在 GROUP BY 中:
SUM(OpStats.risk_amount_adj)/1000000 OpStatsVol
RegSplits.Volume RegSplitsVol
数字 1 可以 - 它是一个聚合函数,不能在 GROUP BY 中。
数字 2 导致此错误 - 它不是聚合函数,并且未在 GROUP BY 子句中列出。
我正在尝试构建一个包含左连接子查询的查询 - 基于我在 account || platform
比较体积数据,以确保从另一个 table 创建一个的存储过程正确执行。
思路是这样的:
Account || Product || T1Vol || T2Vol
abc AT 10 10
def RT 20 25
ghi OB 30
所以在这个例子中,想法是从 T1(table 程序作用)中提取所有账户和产品,从 T2(新创建的 table)中提取所有账户和产品有匹配项的地方(因此,Left Join on T1 = T2)。 (理想情况下,一切都将完美匹配,T1 与 T2 vol 没有差异,T2 volume 也没有空值)。
我编写了以下查询来完成此操作,但效果不佳。我得到的当前错误是 not a GROUP BY expression
- 我认为这不是 真正的问题 。我一直在搜索和迭代无济于事。
查询如下。 (为了与示例保持一致,T1 = OpStats
和 T2 = RegSplits
。非常感谢任何帮助。
SELECT DTA.trading_code Account, OpStats.product_dwkey Platform, SUM(OpStats.risk_amount_adj)/1000000 OpStatsVol, RegSplits.Volume RegSplitsVol
FROM fact_trade_presplit_rollup OpStats
INNER JOIN dim_trading_accounts DTA ON OpStats.trading_dwkey=DTA.trading_dwkey
LEFT OUTER JOIN
( SELECT b.trading_Code Account, a.product_dwkey Platform, SUM(a.risk_amount_adj)/1000000 Volume
FROM fact_trade_rollup a
INNER JOIN dim_trading_accounts b on a.trading_dwkey=b.trading_dwkey
WHERE a.account_type IN('Customer','Taker')
AND a.date_key>='01-JAN-16'
AND a.date_key<='31-MAR-16'
AND a.daily_db_metric NOT IN ('Manual Treasury Volume ($B)', 'Manual Volume ($B)', 'HSBC-WL POMS (Internal) Volume ($B)','JPMC-WL Order Book (Internal) Volume ($B)')
AND (a.product_dwkey IN('RT','HWL') AND a.source_name<>'STP')
GROUP BY b.trading_code, a.product_dwkey ) RegSplits
ON (DTA.trading_code = RegSplits.Account) /* is it because I am trying to join DTA to the subquery */
WHERE OpStats.account_type IN('Customer','Taker')
AND OpStats.date_key>='01-JAN-16'
AND OpStats.date_key<='31-MAR-16'
AND OpStats.daily_db_metric NOT IN ('Manual Treasury Volume ($B)', 'Manual Volume ($B)', 'HSBC-WL POMS (Internal) Volume ($B)','JPMC-WL Order Book (Internal) Volume ($B)')
AND (OpStats.product_dwkey IN('RT','HWL') AND OpStats.source_name<>'STP')
GROUP BY DTA.trading_code, OpStats.product_dwkey;
"Not group by expression" 错误很容易检查。
只需将 SELECT 表达式与 GROUP BY 表达式进行比较:
SELECT DTA.trading_code Account,
OpStats.product_dwkey Platform,
SUM(OpStats.risk_amount_adj)/1000000 OpStatsVol,
RegSplits.Volume RegSplitsVol
FROM ......
......
GROUP BY DTA.trading_code,
OpStats.product_dwkey;
SELECT 中有两个元素不在 GROUP BY 中:
SUM(OpStats.risk_amount_adj)/1000000 OpStatsVol
RegSplits.Volume RegSplitsVol
数字 1 可以 - 它是一个聚合函数,不能在 GROUP BY 中。
数字 2 导致此错误 - 它不是聚合函数,并且未在 GROUP BY 子句中列出。