在另一个表中按列的值乘以值的总数

时间:2016-08-06 18:17:35

标签: sql oracle

我正在尝试计算一列中的所有值,然后将此数字乘以另一个表中的值。到目前为止,我有:

SELECT CLUB_FEE * COUNT(MEMBER_ID) AS VALUE
FROM CLUB, SUBSCRIPTION
WHERE CLUB_ID = 'CLUB1';

这不起作用,有人可以帮忙吗?

我还需要为多个俱乐部提供帮助。是否可以在所有俱乐部的一个声明中完成所有操作,然后获得平均值?

2 个答案:

答案 0 :(得分:1)

据推测,你打算这样:

SELECT MAX(c.CLUB_FEE) * COUNT(MEMBER_ID) AS VALUE
FROM CLUB c JOIN
     SUBSCRIPTION s
     ON c.CLUB_ID = s.CLUB_ID
WHERE c.CLUB_ID = 'CLUB1';

您也可以将其写为:

SELECT SUM(c.CLUB_FEE) AS VALUE
FROM CLUB c JOIN
     SUBSCRIPTION s
     ON c.CLUB_ID = s.CLUB_ID
WHERE c.CLUB_ID = 'CLUB1';

我认为第一个版本会更清晰,因为OP在问题中指定COUNT()

如果您想要所有拥有订阅者的俱乐部:

SELECT SUM(c.CLUB_FEE) AS VALUE
FROM CLUB c JOIN
     SUBSCRIPTION s
     ON c.CLUB_ID = s.CLUB_ID
GROUP BY c.CLUB_ID;

答案 1 :(得分:0)

通过检查解释计划,似乎以下版本可能更有效(因为它避免了连接并且仅使用一个聚合)。如果你同时为所有俱乐部都需要这个,那么可能所有的解决方案都会有相同的“优化成本”(他们都会在某个时候加入)。

select club_fee * (select count(member_id) from subscription where club_id = 'CLUB1')
from   club
where  club_id = 'CLUB1'

所以现在唯一的聚合函数被推入子查询,其余的不需要连接或其他聚合函数。

当然,这只有表现才重要;它很可能不会。