PostgreSQL - 如何使用外键聚合数据?

Posted

技术标签:

【中文标题】PostgreSQL - 如何使用外键聚合数据?【英文标题】:PostgreSQL - How to get aggregation of data with foreign keys? 【发布时间】:2017-10-21 19:46:39 【问题描述】:

我将概述我的目标:

我有用户,他们是体育联盟的球员。

我有一张名为“seasons”的运动季节表。

我有一个游戏表,其中包含各种属性,例如游戏是否完成等,还包含一个 season_id。

我有一个“统计线”表,其中包含相关游戏的外键。为简单起见,假设 stat_lines 表只包含进球、助攻、game_id、season_id 和 user_id。

因此,假设 Sidney Crosby 是一个 id=1 的用户,并且有一个进球数=2、助攻数=3、game_id=4、season_id=1 和 user_id=1 的统计数据行。

我最终想要的是每个球员的赛季总数:

播放器 季节 目标 助攻 积分

1 (Crosby) - 第 1 - 10 - 12 - 22 季

1 (克罗斯比) - 第 2 - 10 - 10 - 20 季

2 (Bergeron) - 第 1 季 - 0 - 4 - 4

我不知道该怎么做。

感觉我需要进行两次 GROUP BY 调用,但我不知道该怎么做。

【问题讨论】:

【参考方案1】:

不就是这样

SELECT user_id, season_id, sum(goals), sum(assists), sum(goals) + sum(assists)
FROM stat_lines
GROUP BY user_id, season_id
ORDER BY user_id, season_id;

?

【讨论】:

天哪。谢谢你。我显然对 SQL 很陌生。我习惯了 Ruby on Rails,它抽象了 SQL,但我希望通过数据库视图来提高效率。再次感谢您,我很感激。当计时器允许时,我会确保将您的答案标记为正确。

以上是关于PostgreSQL - 如何使用外键聚合数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在继承类postgresql上实现外键

如何在PostgreSQL中将状态日志数据聚合成具有相同状态的时间间隔?

如何使Doctrine PostgreSQL外键约束DEFERRABLE

数据库演练外键SQL语句的编写&分组和聚合函数的组合使用

如何使用 postgresql 按多列中表示的值进行聚合

如何在 PostgreSQL 中添加外键