【问题标题】:Why sum() function isn't giving the exact value in this case?为什么 sum() 函数在这种情况下没有给出确切的值?
【发布时间】:2018-05-29 10:05:23
【问题描述】:

select s_id, s_f_name, s_l_name, s_roll_no, s_class, 
       SUM(mid_1_english + mid_2_english)/2 as mid_english, 
       SUM(mid_1_mathematics + mid_2_mathematics)/2 as mid_mathematics,
       semester_final_english,
       semester_final_mathematics,
       SUM((mid_1_english + mid_2_english)/2 + semester_final_english) as total_english, 
       SUM((mid_1_mathematics + mid_2_mathematics)/2 + semester_final_mathematics) as total_mathematics,
       SUM((mid_1_mathematics + mid_2_mathematics)/2 + (mid_1_english + mid_2_english)/2 + semester_final_mathematics + semester_final_mathematics) as total
from elaborate_term_result_sheet 
group by s_f_name, s_l_name
order by s_roll_no;

运行创建的这个查询后,它确实显示了输出,但值有点波动

mid_1_english + mid_2_english = mid_english

mid_1_mathematics + mid_2_mathematics = mid_mathematics

mid_english + term_final_english = total_english

mid_mathematics + term_final_mathematics = total_mathematics

total = total_english + total_mathematics

【问题讨论】:

  • 也许您可以更改例如 SUM()/2 如下 (1.0 * SUM())/2 这会将使用的数据类型从整数更改为十进制,这样您就不会在计算中丢失十进制数据
  • 不,它不起作用
  • 什么值错了?
  • ... + semester_final_mathematics + semester_final_mathematics) as total -- 你能在这段代码中发现任何(逻辑)错误吗?
  • 你确定你最后的计算应该是semester_final_mathematics+semester_final_mathematics吗?应该是数学+英语吗?

标签: mysql sql rdbms


【解决方案1】:
select s_id, s_f_name, s_l_name, s_roll_no, s_class, 
   SUM(mid_1_english + mid_2_english)/2 as mid_english, 
   SUM(mid_1_mathematics + mid_2_mathematics)/2 as mid_mathematics,
   semester_final_english,
   semester_final_mathematics,
   SUM((mid_1_english + mid_2_english)/2 + semester_final_english) as total_english, 
   SUM((mid_1_mathematics + mid_2_mathematics)/2 + semester_final_mathematics) as total_mathematics,
   SUM((mid_1_english + mid_2_english)/2 + semester_final_english + (mid_1_mathematics + mid_2_mathematics)/2 + semester_final_mathematics) as total from result_sheet_1 group by s_f_name, s_l_name order by s_roll_no;

提供正确输出的唯一更改是

SUM((mid_1_english + mid_2_english)/2 + semester_final_english + (mid_1_mathematics + mid_2_mathematics)/2 + semester_final_mathematics) as total

the snapshot of the output of this query

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多