使用函数在Postgresql中进行计算

时间:2019-01-11 20:41:45

标签: postgresql function data-structures

我有一张组织表格。这些列是:id int,名称文本,parent_id int.so,它具有树结构。我有另一个表,人员,其字段ID为int,名称txt,家庭txt,organization_id int。我还有另一个表,时钟,并且这些列是:id int,staff_id int,Date date,Time time,用于注册时钟输入和时钟输出。

对于树中的每个组织(每个节点),我想计算其人员的工作时间。最后,我应该总结孩子的工作时间,以获得其父母的工作时间,依此类推。

所以我需要一个函数来做到这一点。某人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您不需要功能,请使用递归CTE。
如果我正确理解了您的架构和各列的含义,则应如下所示:

WITH RECURSIVE BrowseOrgs(init_id, id, name, parent_id) AS (
    SELECT id, id, name, parent_id
    FROM organizations
    /* Add WHERE clause here if needed */
    UNION ALL
    SELECT init_id, o.id, b.name, o.parent_id
    FROM organizations o
    JOIN BrowseOrgs b ON o.parent_id = b.id
)                       
SELECT init_id, b.name, date, SUM(time)
FROM BrowseOrgs b
JOIN staff s ON organization_id = b.id
JOIN clocks c on s.id = staff_id
GROUP BY init_id, b.name, date