Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
子查询中的SQL分组错误_Sql_Oracle_Oracle Sqldeveloper - Fatal编程技术网

子查询中的SQL分组错误

子查询中的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

在第二个子查询中,我得到一个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
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
)