我试图计算一列中的所有值,然后将此数乘以不同表中的值。到目前为止,我有:在不同的表中乘以列中值的总数
SELECT CLUB_FEE * COUNT(MEMBER_ID) AS VALUE
FROM CLUB, SUBSCRIPTION
WHERE CLUB_ID = 'CLUB1';
这不工作,但任何人都可以请帮忙吗?
我也需要帮助为多个俱乐部做这个。是否可以在所有俱乐部的一个声明中完成这一切,然后获得平均水平?
我试图计算一列中的所有值,然后将此数乘以不同表中的值。到目前为止,我有:在不同的表中乘以列中值的总数
SELECT CLUB_FEE * COUNT(MEMBER_ID) AS VALUE
FROM CLUB, SUBSCRIPTION
WHERE CLUB_ID = 'CLUB1';
这不工作,但任何人都可以请帮忙吗?
我也需要帮助为多个俱乐部做这个。是否可以在所有俱乐部的一个声明中完成这一切,然后获得平均水平?
想必,你打算是这样的:
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;
从检查解释计划,似乎以下版本可能会多一点有效的(因为它避免了一起,只使用一个聚集)。如果你同时需要所有俱乐部的话,那么可能所有的解决方案都会有相同的“优化者成本”(他们都会在某个时候加入)。
select club_fee * (select count(member_id) from subscription where club_id = 'CLUB1')
from club
where club_id = 'CLUB1'
所以,现在唯一的聚集函数推入子查询,其余并不需要或者加入或其他聚合函数。
当然,这只在性能很重要时才重要;它可能不是。
请添加示例数据和预期输出 –
编辑您的问题并提供样本数据和期望的结果。 –
[踢坏的习惯:使用旧式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - 在ANSI - ** 92 ** SQL标准(**超过20年前的**)中,旧式*逗号分隔的表*样式列表被替换为* proper * ANSI'JOIN'语法并且不鼓励使用它 –