在postgresql中使用MIN,MAX,(SUM / COUNT)子查询

时间:2016-08-13 17:16:52

标签: sql postgresql subquery

我有这个FACT_TABLE FACT_TABLE

STEP 有一个独特的 DURATION FOLDER 有一个或多个 STEP PRCEDURE 还有很多 FOLDER

我希望使用SQL PostgreSQL查询获得此结果,这意味着获取文件夹的最小总和持续时间,文件夹的最大总持续时间以及按 PRCEDURE <分组的所有文件夹的平均值/强>
 RESULT

我尝试使用子查询来解决它: SELECT PROCEDURE.NAME, min(DUR), MAX(DUR), (SUM(DUR)/COUNT(DISTINCT ID_FOLDER)) from (SELECT ID_FOLDER, SUM (DURATION) as DUR from FACT_TABLE group by ID_FOLDER) Inner join PROCEDURE on PROCEDURE.ID = FACT_TABLE.ID_PROCEDURE GROUP By PROCEDURE.NAME ; 但它不起作用,我错过了什么吗?这个逻辑有什么问题?

1 个答案:

答案 0 :(得分:1)

您的查询背后的想法应该有效。有一些调整:

ad_set = AdSet('6049562095738')
response=ad_set.api_get(params={AdSet.Field.redownload:True})
print(response)

注意:

  • 在子查询中包含SELECT p.NAME, MIN(pf.DUR), MAX(pf.DUR), AVG(pf.DUR) FROM (SELECT f.ID_PROCEDURE, f.ID_FOLDER, SUM(f.DURATION) as DUR FROM FACT_TABLE f GROUP BY f.ID_PROCEDURE, f.ID_FOLDER ) pf JOIN PROCEDURE p ON p.ID = pf.ID_PROCEDURE GROUP BY p.NAME; ,因此可以用于连接并且聚合是正确的。
  • 所有表的表别名的定义。
  • 使用合格的列名来避免歧义。
  • 使用更简单的ID_PROCEDURE而不是AVG()SUM()的比率。