我正在试图获得一些统计数字的在线游戏,我坚持。我正在搜索一个SQL语句以获得底部的结果。
有三张桌子:
一个包含团队的表,每个表都有一个唯一的标识符。
table teams
---------------------
| teamid | teamname |
|--------|----------|
| 1 | team_a |
| 2 | team_x |
---------------------一种有球员的表,每个表都有一个唯一的标识符,并且可以选择加入一个队,由其独特的茶杯组成。
table players
--------------------------------
| playerid | teamid | username |
|----------|--------|----------|
| 1 | 1 | user_a |
| 2 | | user_b |
| 3 | 2 | user_c |
| 4 | 2 | user_d |
| 5 | 1 | user_e |
--------------------------------最后是一个有事件的表。事件(持续时间以秒为单位)通过玩家in与其中一个玩家相关。
table events.
-----------------------
| playerid | duration |
|----------|----------|
| 1 | 2 |
| 2 | 5 |
| 3 | 3 |
| 4 | 8 |
| 5 | 12 |
| 3 | 4 |
-----------------------我试图得到一个结果,所有团队成员的持续时间都是被总结出来的。
result
--------------------------
| teamid | SUM(duration) |
|--------|---------------|
| 1 | 14 | (2+12)
| 2 | 15 | (3+8+4)
--------------------------我尝试了几种联合的组合,其中IN,JOIN和GROUP,但没有得到正确的结果。我正在使用PostgreSQL和PHP。有谁可以帮我?
发布于 2014-11-29 14:33:43
只需将sum与group by结合使用
select t.teamid, sum(e.duration)
from team t
join players p on t.teamid = p.teamid
join events e on p.playerid = e.playerid
group by t.teamid如果您需要返回所有团队,即使它们没有事件,则可以使用outer join。
发布于 2014-11-29 14:54:29
尝尝这个
SELECT teamid, Sum(duration),
AS LineItemAmount, AccountDescription
FROM teams
JOIN teams ON teams.teamid = players.teamid
JOIN events ON players.playersid = events.playersid
JOIN GLAccounts ON InvoiceLineItems.AccountNo = GLAccounts.AccountNo
GROUP BY teamidhttp://www.w3computing.com/sqlserver/inner-joins-join-two-tables/
https://stackoverflow.com/questions/27203301
复制相似问题