Eye*_*dic 4 postgresql aggregate
我有一个父行,然后有许多子行,我必须汇总这些子行的统计信息。
对于更具体的示例,让我们假设我有一轮高尔夫球(父行),然后是带有每个洞得分的子行。我需要汇总这些行的统计数据,例如小鸟数、标准杆数、转向架数、推杆数等等。然后将这些数字放入一个 round_detail 表中。
什么是最好的解决方案?
如果重要的话,我正在使用 postgres,但这可能只是一个一般的 sql 问题。
您考虑的概念称为物化视图。既然你评论:
之后很少编辑回合
.. 我认为这对你的情况应该是个好主意。一些 RDBMS 有不同的对象。在 Postgres 中,这只是将视图或 SRF(设置返回函数)的结果写入表的问题。您可以在此处的手册中找到用于刷新 MV 的基本代码示例。
有关我为此目的使用的更复杂的制度,请参阅有关 SO 的相关答案。
您对(重新)创建物化视图的查询可能如下所示:
SELECT c.name AS course
,r.user_id
,s.round_id
,COUNT(NULLIF(s.strokes = h.par, FALSE)) AS pars
,COUNT(NULLIF(s.strokes = h.par - 1, FALSE)) AS birdies
-- more columns ..
FROM score s
JOIN round r ON r.id = s.round_id
JOIN course c ON c.id = r.course_id
JOIN hole h ON h.id = s.hole_id
GROUP BY 1,2,3
Run Code Online (Sandbox Code Playgroud)
我简化了您的测试用例并添加了查询:->sqlfiddle。