计算连接排列的行数

时间:2014-12-14 18:06:30

标签: mysql

我有两个表 - 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但是不同的值),然后将所有这些值添加到单个列中。

希望这是有意义的,并提前感谢。

1 个答案:

答案 0 :(得分:1)

由于INNER JOINSELECT之前完成,因此无法知道每个表中的行数,因为它们已加入。所以你可以做的是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(*),这样可以确保获得所有行,但*并未优化。