子查询中的SQL分组错误
在第二个子查询中,我得到一个not a group by错误。我不知道怎么解决它。查询的目的是查找允许股东在每笔交易中买卖超过50000股或出售其不拥有的股票的所有经纪人。以下是您的子查询之一:子查询中的SQL分组错误,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,在第二个子查询中,我得到一个not a group by错误。我不知道怎么解决它。查询的目的是查找允许股东在每笔交易中买卖超过50000股或出售其不拥有的股票的所有经纪人。以下是您的子查询之一: SELECT t.trade_id, t.share_holder_id, t.broker_id, t.share_amount FROM trades t INNER JOIN share_holders sh ON t.share_holder_id = sh.share_holder_id IN
SELECT t.trade_id,
t.share_holder_id,
t.broker_id,
t.share_amount
FROM trades t
INNER JOIN share_holders sh
ON t.share_holder_id = sh.share_holder_id
INNER JOIN share_holder_shares shs
ON shs.share_holder_id = sh.share_holder_id
WHERE (t.share_amount >50000
AND shs.amount <0
OR t.transaction_type = 2)
GROUP BY t.trade_id,
t.share_holder_id,
t.broker_id,
t.share_amount
HAVING t.share_amount =
(SELECT SUM(DECODE(transaction_type,1,share_amount))
FROM trades t1
WHERE t.share_id = t1.share_id
AND t.share_holder_id = t1.share_holder_id
AND t.transaction_time < t1.transaction_time
GROUP BY t.share_amount
)
OR t.share_amount =
(SELECT SUM(DECODE(transaction_type,2,0-share_amount))
FROM trades t1
WHERE t.share_id = t1.share_id
AND t.share_holder_id = t1.share_holder_id
AND t.transaction_time < t1.transaction_time
GROUP BY t.share_amount
)
ORDER BY t.trade_id,
t.share_holder_id,
t.broker_id ;
having子句在group by之后处理。因此,在having子句中,您可以将用于聚合t.trade\u id、t.share\u holder\u id、t.broker\u id、t.share\u amount的列或聚合函数中的其他列,如maxt.share\u id
我注意到您正在与用于聚合的列进行比较。通过将逻辑移到GROUPBY之前的where子句中,可以修复语法错误。这解决了语法问题;我不确定这是否是您想要的结果。SQLFIDLE应该非常有用!按t.share_amount分组有什么用?@shahkalpesh我实际上不知道该输入哪个分组,因为其他分组会给出太多的值,所以您需要分组吗?如果是,为什么?在子查询中,我不需要分组依据。子查询的目的只是检查共享金额。但即使我一组一组地离开,错误依然存在
(SELECT SUM(DECODE(transaction_type,1,share_amount))
FROM trades t1
WHERE t.share_id = t1.share_id
AND t.share_holder_id = t1.share_holder_id
AND t.transaction_time < t1.transaction_time
GROUP BY t.share_amount
)