0

对于查询,我需要选择“平均最小值”的记录。所以理论上我应该做类似的事情

select min(avg(x)) from tableA;

由于不支持嵌套聚合函数,我不确定如何实现这一点。我也尝试过子查询,但我永远无法让它工作,所以有人知道吗?伪代码就足够了,我不需要完整的解决方案。这就是为什么我自己使用伪代码而不提供我正在处理的数据的原因。

提前致谢!

编辑:因为需要提供示例/示例数据:

我有 3 个表格,我需要从中获取零件、员工和持续时间。我需要按零件和员工对查询进行分组,并且需要获得最短的平均持续时间。

SELECT p.part, e.Name, min(avg(s.duration)) as AvgDuration
FROM store s
JOIN parts p
ON p.PartId = s.PartId
JOIN employees e
ON e.EmployeeId = s.EmployeeId
GROUP BY p.PartNr, e.Name
ORDER BY PartNr;

我知道这是一个错误的查询,但这应该清楚我的目标。

基于 Gordon 的解决方案,

我有以下查询:

SELECT m.PartNr, m.Name, min(avg_duration) as Duration
FROM (
    SELECT p.PartNr, e.Name, avg(s.Duration) as avg_duration
    FROM Store s
    JOIN parts p
    ON p.PartId = s.PartId
    JOIN employees e
    ON e.EmployeeId = s.EmployeeId
    GROUP BY p.PartNr, e.Name
) m
GROUP BY m.PartNr, m.Name;

但这样做的目的是为每个员工提供最低平均值,而只显示最低的员工。

4

2 回答 2

2

平均值的最小值是没有意义的,除非你是按某些东西聚合的。我希望是这样的:

select min(avg_x)
from (select avg(x) as avg_x
      from t
      group by ?
     ) x;
于 2018-08-07T12:03:14.397 回答
1

你可以通过使用子查询然后使用 min 函数来做到这一点。从讨论中我得到了问题,发现它需要下面的查询

select t2.PartNr,t3.Name,Prt_minDuration from 
(
select m.PartNr,min(Duration) as Prt_minDuration from
(
SELECT m.PartNr, m.Name, min(avg_duration) as Duration
FROM (
    SELECT p.PartNr, e.Name, avg(s.Duration) as avg_duration
    FROM Store s
    JOIN parts p
    ON p.PartId = s.PartId
    JOIN employees e
    ON e.EmployeeId = s.EmployeeId
    GROUP BY p.PartNr, e.Name
) m
GROUP BY m.PartNr, m.Name
) t1 group by PartNr
) t2

inner join 
(
SELECT m.PartNr, m.Name, min(avg_duration) as Duration
FROM (
    SELECT p.PartNr, e.Name, avg(s.Duration) as avg_duration
    FROM Store s
    JOIN parts p
    ON p.PartId = s.PartId
    JOIN employees e
    ON e.EmployeeId = s.EmployeeId
    GROUP BY p.PartNr, e.Name
) m
GROUP BY m.PartNr, m.Name
) t3 on t2.PartNr=t3.PartNr and t2.Prt_minDuration=t3.Duration
于 2018-08-07T12:25:29.710 回答