我有两个表 - team_instance和player_instance,其中player_instance引用了团队实例。我还有其他表 - 称为X,Y,Z - 引用player_instance。
我想要做的是将team_instance和player_instance与表X,Y,Z中的每一个连接起来,并计算每个表返回的行数。
到目前为止,我有这个:
SELECT team_instance.id, COUNT(team_instance.id) * 3 AS dropkick_points
FROM team_instance
INNER JOIN player_instance ON team_instance.id = player_instance.team_instance_id
INNER JOIN dropkicks ON player_instance.id = dropkicks.kicker_id
WHERE dropkicks.success = true
表dropkicks是X,我使用COUNT来累计返回的总行数(以dropkicks'success'中的值为例,条件为true)。
我现在需要做的是对于其他表Y,Z(不会乘以3但是不同的值),然后将所有这些值添加到单个列中。
希望这是有意义的,并提前感谢。
答案 0 :(得分:1)
由于INNER JOIN
在SELECT
之前完成,因此无法知道每个表中的行数,因为它们已加入。所以你可以做的是COUNT
每一个:
SELECT ( SELECT COUNT(X.id) * 1 FROM X )
+ ( SELECT COUNT(Y.id) * 2 FROM Y )
+ ( SELECT COUNT(Z.id) * 3 FROM Z )
AS dropkick_points
...
这将返回(# rows in X * 1) + ( # rows in Y * 2) + (# rows in Z * 3)
注意这假设id
是主键,并且在表中是唯一的。如果您不确定主键或它是复合词,那么您可以将COUNT(X.id)
替换为COUNT(*)
,这样可以确保获得所有行,但*
并未优化。