MySQL 存储过程平分1

需求:指标平分权重 1。
子节点权重平分1,差值在最后一个节点找补。
在这里插入图片描述

存储过程

因为指标个数在 200 以内,所以 5 位小数就满足了。

DELIMITER $$
DROP PROCEDURE IF EXISTS averageWeight$$
CREATE PROCEDURE `averageWeight` (
	IN `total` int,
	OUT `average` DECIMAL (15, 5),
	OUT `last` DECIMAL (15, 5)
)
	BEGIN
		IF total = 0 THEN
			SET average = 0;
			SET last = 0;
		END IF;

		SELECT 1/total INTO average;
		SET @avgTotal = average * total;
		IF @avgTotal = 1 THEN
			SET last = average;
		ELSE
			-- @avgTotal > 1 则相当于 average - 差值
			SET last = average + (1 - @avgTotal);
		END IF;
	END $$
DELIMITER;

测试

SET @total = 109;

CALL averageWeight(@total, @average, @last);
SELECT @average, @last;
SELECT @average * (@total - 1) + @last;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LXang723

如果用到的话,一键三连。。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值