★计算同一记录中不同字段之和
背景说明:MainDB表内有几十个字段用于存放配方数据,需要将它们加起来看看是否归一. 由于MySQL没有类似高版本Access那样的计算字段,因为需要用SQL语法来处理.
自定义2个术语:
横向求和:即同一条记录内不同数值字段之间求和, 用加号来处理即可.
纵向求和:即不同记录内同一数值字段之间求和, MySQL里面有SUM函数可用.
技巧1: 横向求和: 各字段之间用加号求和(不能用Sum,它用于纵向求和,此为横向求和)
技巧2: 由于某些字段值可能为NULL,直接相加结果会成为NULL导致数值被掩蔽,需要将NULL转化为0,使用MySQL的coalesce函数处理.
技巧3: 如果需要找出求和值与某一字段(此表中原有一个总和字段,它事先在导入数据库之前就计算过.但数据库处理过程中可能存在bug导致某些字段没有成功导入却没有被发觉,因此需要检验完整性),可以用Having子句,将前面计算出来的总和值与数据库内已经保存的字段值[总和]进行相减,求绝对值后再判断是否大于0.001.即误差是否超过0.001(单位为%)
技巧4: MySQL中DEC即是Decimal的简称,也是系统的保留词,溶剂字段DEC要用单反引号包围起来,即`DEC`; 一般的字段名称可以用单反引号包围,也可以不用.
以下为SQL语句:
SELECT RecID, 配方名称,(
COALESCE ( LIPF6, 0 ) + COALESCE ( EC, 0 ) + COALESCE ( PC, 0 ) + COALESCE ( DMC, 0 ) + COALESCE ( EMC, 0 ) + COALESCE ( `DEC`, 0 ) + COALESCE ( EP, 0 ) + COALESCE ( PP, 0 ) + COALESCE ( MA, 0 ) + COALESCE ( EA, 0