Sql 左联接为整个列返回一个值
我正在对子查询中的另一个表进行左连接,我想从左连接返回的commission列只为整个commission列带来一个值,这是错误的(请参见下面的第一个查询结果)。现在,如果我在表A(查询2)之外执行左连接,那么我将得到所需的结果(请参见第二个结果集)。问题是为什么在第一个查询中,表A中的左连接不起作用 我曾尝试过在子查询/表A(查询2)之外使用左连接,效果很好,但我想了解为什么左连接在表A中不起作用 下面的查询(查询1)给出了佣金列中的重复值Sql 左联接为整个列返回一个值,sql,oracle,left-join,Sql,Oracle,Left Join,我正在对子查询中的另一个表进行左连接,我想从左连接返回的commission列只为整个commission列带来一个值,这是错误的(请参见下面的第一个查询结果)。现在,如果我在表A(查询2)之外执行左连接,那么我将得到所需的结果(请参见第二个结果集)。问题是为什么在第一个查询中,表A中的左连接不起作用 我曾尝试过在子查询/表A(查询2)之外使用左连接,效果很好,但我想了解为什么左连接在表A中不起作用 下面的查询(查询1)给出了佣金列中的重复值 Position_A1 table Sector
Position_A1 table
Sector Short_Side
------------------------
Engineering -2
Financial -5
Industry -10
Corporate -36
Energy -52
Financial -26
Order table
Sector Commission
------------------------
Engineering 10
Financial 100
Industry 36
Corporate 91
Energy 10
Financial 25
问题1
SELECT *
FROM
(SELECT POS.SECTOR,
SUM(ABS(POS.SHORT_SIDE)) AS Short_Expo,
COM.COMMISSION
FROM Position_A1 POS
LEFT JOIN (SELECT SECTOR, sum(COMMISSION) AS COMMISSION
FROM ORDER
WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')
GROUP BY SECTOR
)COM
ON POS.SECTOR = COM.SECTOR
WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')
GROUP BY SECTOR ) A
但是,如果我尝试下面的方法,我会在“佣金”列中得到正确的结果
问题2
SELECT A.*, COM.COMMISSION
FROM
(SELECT POS.SECTOR,
SUM(ABS(POS.SHORT_SIDE)) AS Short_Expo
FROM Position_A1 POS
WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')
GROUP BY SECTOR ) A
LEFT JOIN (SELECT SECTOR, sum(COMMISSION) AS COMMISSION
FROM ORDER
WHERE TRADE_DATE = TO_DATE('2019-11-01','YYYY-MM-DD')
GROUP BY SECTOR
)COM
ON POS.SECTOR = COM.SECTOR
根据第一次查询,我得到的结果是:
Sector Short_Expo Commission
Energy 256 125
Industry 236 125
Financial 125 125
根据第二次查询,我得到的结果(正确)是:
问题是为什么查询1不能给出理想的结果,而查询2不能给出理想的结果。我在第一个问题中做错了什么导致了重复佣金
使用第一个,似乎所有部门都只返回一个部门(金融)的佣金。在第一个查询中,外部查询中的
WHERE
子句(WHERE TRADE\u DATE=TO\u DATE('2019-11-01','yyyyy-MM-DD')
)正在将左联接
转换为内部联接
,因为不匹配的值为NULL
,并且不匹配
通常的解决方案是在
on
子句中包含对后续表的筛选。很难了解您打算发生的事情和实际发生的事情。当提出问题时,请记住没有其他人可以运行这些查询。如果您从查询中删除与问题不直接相关的所有内容(交易日期
?评级
?c_类型
?),这会有所帮助;此外,您还需要包含一些具有代表性的示例数据,以显示您的输入、您实际得到的信息以及您期望得到的信息。您好,抱歉,我已经做了更改,我希望这对您有所帮助您的查询没有本质上的问题。在第一个查询中,首先在子查询中按扇区分组,然后在外部查询中再次进行相同的分组是非常奇怪的,但在某些情况下它是有效的。除非您展示数据模型的样子,否则我们无法真正回答您为什么没有得到预期的结果。什么在位置\u A1
?顺序是什么?无论如何,第二个查询看起来比第一个查询干净得多。如果这显示了您期望的结果,那么问题是什么?您的第一个查询真的是您使用的查询吗?我希望它会出错,因为您的com.commission列不在com表或表A中的where子句group by.Gordon中?@Ali\M。我澄清了。
Sector Short_Expo Commission
Energy 256 128
Industry 236 325
Financial 125 186