gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:22:45 24 4
gpt4 key购买 nike

我有这个 FACT_TABLE FACT_TABLE :

STEP 有一个独特的DURATIONFOLDER 有一个或多个STEPPRCEDURE 也有很多 FOLDER

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

我尝试使用子查询来解决它:SELECT PROCEDURE.NAME, min(DUR), MAX(DUR), (SUM(DUR)/COUNT(DISTINCT ID_FOLDER))

(从 FACT_TABLE 中选择 ID_FOLDER,SUM(DURATION)作为 DUR
按 ID_FOLDER 分组)
在 PROCEDURE.ID = FACT_TABLE.ID_PROCEDURE 上内部加入 PROCEDURE
按 PROCEDURE.NAME 分组;
但它没有用,我错过了什么吗?这个逻辑有什么问题?

最佳答案

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

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()COUNT() 的比率。

关于sql - 在 postgresql 中使用 MIN, MAX, (SUM/COUNT) 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38935187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com