我是一位相当有经验的 SQL Server 开发人员,但这个问题让我很困惑。
我有一个功能。该函数正在引用一个类似这样的表......
PERFORMANCE_ID, JUDGE_ID, JUDGING_CRITERIA, SCORE
--------------------------------------------------
101, 1, 'JUMP_HEIGHT', 8
101, 1, 'DEXTERITY', 7
101, 1, 'SYNCHRONIZATION', 6
101, 1, 'SPEED', 9
101, 2, 'JUMP_HEIGHT', 6
101, 2, 'DEXTERITY', 5
101, 2, 'SYNCHRONIZATION', 8
101, 2, 'SPEED', 9
101, 3, 'JUMP_HEIGHT', 9
101, 3, 'DEXTERITY', 6
101, 3, 'SYNCHRONIZATION', 7
101, 3, 'SPEED', 8
101, 4, 'JUMP_HEIGHT', 7
101, 4, 'DEXTERITY', 6
101, 4, 'SYNCHRONIZATION', 5
101, 4, 'SPEED', 8
在此示例中,有 4 名评委(ID 分别为 1、2、3 和 4)根据 4 个不同的标准(JUMP_HEIGHT、DEXTERITY、SYNCHRONIZATION、SPEED)来评判表演 (101)。
(请记住,在我的真实数据中,有 10 多个标准和至少 6 位评委。)
我想通过 JUDGING_CRITERIA 将结果汇总为一个分数,然后通过求和将这些结果汇总为最终分数……像这样……
SELECT SUM (Avgs) FROM
(SELECT AVG(SCORE) Avgs
FROM PERFORMANCE_SCORES
WHERE PERFORMANCE_ID=101
GROUP BY JUDGING_CRITERIA) result
但是...这不是我想要的,因为我想从 AVG 中排除每个 JUDGING_CRITERIA 分组的最高和最低值。那是我想不通的部分。AVG 应仅应用于 GROUPING FOR EACH JUDGING_CRITERIA 的中间值。JUMP_HEIGHT 的 HI 值和 LO 值不应包含在平均值中。DEXTERITY 的 HI 值和 LO 值不应包含在平均值中。等等。
我知道这可以通过将每个标准的 hi 和 lo 设置为 NULL 来完成。但这是一个功能,应该非常快。
我想知道是否有办法将其作为 SET 操作执行,但仍会自动从聚合中排除 HI 和 LO?
谢谢你的帮助。我有一种感觉,它可能可以用一些高级 SQL 语法来完成,但我不知道。
最后一件事。这个例子实际上是我试图解决的问题的简化。为了简单起见,我这里没有提到其他限制。
赛斯