给定场景:
table fd
(cust_id, fd_id) primary-key and amount
table loan
(cust_id, l_id) primary-key and amount我想列出所有定期存款少于所有贷款总和的客户。
查询:
SELECT cust_id
FROM fd
WHERE amount
<
(SELECT sum(amount)
FROM loan
WHERE fd.cust_id = loan.cust_id);
OR should we use
SELECT cust_id
FROM fd
WHERE amount
<
(SELECT sum(amount)
FROM loan
WHERE fd.cust_id = loan.cust_id group by cust_id);一个客户可以有多个贷款,但一次只考虑一个FD。
发布于 2011-12-27 22:47:42
由于您已按cust_id过滤数据,因此不需要GROUP BY。在任何情况下,内部查询都将返回相同的结果。
发布于 2011-12-27 22:48:03
不,它不是,因为您使用id = fd.cust_id计算客户的sum(amount),所以对于单个客户也是如此。
但是,如果您的子查询以某种方式计算多个客户的sum,group by将导致子查询生成多个行,这将导致条件(<)失败,从而导致查询失败。
发布于 2011-12-27 22:47:56
具有诸如sum之类的聚合但没有group by的查询将输出一个组。将对所有匹配的行计算聚合。
条件子句中的子查询只能返回一行。如果子查询返回多行,下面的表达式是什么意思?
where 1 > (... subquery ...)因此必须省略group by;您甚至会在第二次查询时得到一个错误。
注意:当您指定all, any, or some时,子查询可以返回多个行:
where 1 > ALL (... subquery ...)但很容易理解为什么这在您的情况下没有意义;您会将一个客户的数据与另一个客户的数据进行比较。
https://stackoverflow.com/questions/8645853
复制相似问题