You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并SQL查询,计算Finalmarks表三列数值的指定均值?

解决方案

根据你的需求,需要针对每行的三个分数,判断去掉最大值还是最小值后计算剩余两数的平均值,并输出指定格式的结果。以下是实现该逻辑的SQL查询:

SELECT 
    CONCAT(
        '(',
        CASE 
            WHEN (max_val - mid_val) > (mid_val - min_val) THEN CONCAT(min_val, '+', mid_val)
            ELSE CONCAT(mid_val, '+', max_val)
        END,
        ')/2=',
        ROUND(average_val, 0),
        CASE 
            WHEN average_val <> FLOOR(average_val) THEN CONCAT('(', average_val, ')')
            ELSE ''
        END
    ) AS Result
FROM (
    SELECT 
        -- 计算当前行的最小值
        CASE 
            WHEN [1VAL] <= [2VAL2] AND [1VAL] <= [3VAL3] THEN [1VAL]
            WHEN [2VAL2] <= [1VAL] AND [2VAL2] <= [3VAL3] THEN [2VAL2]
            ELSE [3VAL3]
        END AS min_val,
        -- 计算当前行的中间值:总和减去最小值和最大值
        [1VAL] + [2VAL2] + [3VAL3] - 
            CASE 
                WHEN [1VAL] <= [2VAL2] AND [1VAL] <= [3VAL3] THEN [1VAL]
                WHEN [2VAL2] <= [1VAL] AND [2VAL2] <= [3VAL3] THEN [2VAL2]
                ELSE [3VAL3]
            END -
            CASE 
                WHEN [1VAL] >= [2VAL2] AND [1VAL] >= [3VAL3] THEN [1VAL]
                WHEN [2VAL2] >= [1VAL] AND [2VAL2] >= [3VAL3] THEN [2VAL2]
                ELSE [3VAL3]
            END AS mid_val,
        -- 计算当前行的最大值
        CASE 
            WHEN [1VAL] >= [2VAL2] AND [1VAL] >= [3VAL3] THEN [1VAL]
            WHEN [2VAL2] >= [1VAL] AND [2VAL2] >= [3VAL3] THEN [2VAL2]
            ELSE [3VAL3]
        END AS max_val,
        -- 根据差值判断取哪两个数的平均值
        CASE 
            WHEN (max_val - mid_val) > (mid_val - min_val) THEN (min_val + mid_val)/2.0
            ELSE (mid_val + max_val)/2.0
        END AS average_val
    FROM FinalMarks
) AS sub;

逻辑说明

  1. 子查询计算核心值:
    • 最小值/最大值:通过CASE语句直接比较三个列的大小得到
    • 中间值:利用三个数的总和减去最小值和最大值推导得出
  2. 判断逻辑:
    • 当最大值与中间值的差值大于中间值与最小值的差值时,去掉最大值,取最小值+中间值的平均
    • 否则去掉最小值,取中间值+最大值的平均
  3. 格式输出:
    • 拼接成你需要的表达式格式,当平均值为非整数时,额外保留原始小数结果

执行该查询后,将输出与你预期完全一致的结果:

(28+30)/2=29
(20+30)/2=25
(39+44)/2=42(41.5)
(55+65)/2=60

内容的提问来源于stack exchange,提问作者sharan kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:17:02