对于查询,我需要选择“平均值最小”的记录。因此,从理论上讲,我应该做类似
的操作select min(avg(x)) from tableA;
由于不支持嵌套聚合函数,因此我不确定如何实现此目的。我尝试使用子查询作为wel,但是我永远无法使其工作,所以有人有想法吗?伪代码就足够了,我不需要完整的解决方案。这就是为什么我自己使用伪代码而不提供正在处理的数据的原因。
谢谢!
编辑: 由于需要提供示例/ sampledata:
我有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;
我知道这是一个错误的查询,但是应该清楚我的目标。
基于戈登的解决方案,
我有以下查询:
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;
但这是为每个员工提供最小的平均值,而只显示最小的员工。
答案 0 :(得分:1)
平均值的最小值没有意义,除非您正在汇总某些内容。我期望像这样:
select min(avg_x)
from (select avg(x) as avg_x
from t
group by ?
) x;
答案 1 :(得分: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