我需要在Access中执行TREAMMEAN,它没有此功能。
在一个表中我有很多员工,每个员工都有很多记录。我需要分别为每个员工提供TRIMMEAN值。
以下查询对所有记录执行TOP 10%:
qry_data_TOP10_ASC
qry_data_TOP10_DESC
unionqry_TOP10_ASCandDESC
qry_data_ALL_minus_union_qry
之后,我可以使用Avg(平均值)。
但我不知道如何为每位员工做这件事。
可视化:
您没有真正在伪代码中提供有关数据字段的信息,但使用您的示例,其中包含基本字段信息,我可以建议以下内容应该如您所述
它假定field1是您唯一的记录ID - 但您没有提到哪些字段是键
SELECT AVG(qry_data.field2) FROM qry_data WHERE qry_data.field1 NOT IN
(SELECT * FROM
(SELECT TOP 10 PERCENT qry_data.field1, qry_data.field2
FROM qry_data
ORDER BY qry_data.field2 ASC)
UNION
(SELECT TOP 10 PERCENT qry_data.field1, qry_data.field2
FROM qry_data
ORDER BY qry_data.field2 DESC)
)
这应该给你你想要的东西,两个子查询应该关联每个员工的TOP 10(升序和降序)。然后,两个NOT IN应该从Table1记录中删除那些,然后对Employees和Average the Scores进行分组。
SELECT Table1.Employee, AVG(Table1.Score) AS AvgScore
FROM Table1
WHERE ID NOT IN
(
SELECT TOP 10 ID
FROM Table1 a
WHERE a.Employee = Table1.Employee
ORDER BY Score ASC, Employee, ID
)
AND ID NOT IN
(
SELECT TOP 10 ID
FROM Table1 b
WHERE b.Employee = Table1.Employee
ORDER BY Score DESC, Employee, ID
)
GROUP BY Table1.Employee;