尝试将这个类似于税务的IRS函数Calculating revenue share at different tiers转换为SQL。假设该表是一列(价格),并且层将被动态添加。
我的第一次尝试使用了一些case语句,但效果不佳。我已经废弃了它:)谢谢你的帮助!
发布于 2010-04-22 23:42:22
SQL并不真正适合迭代循环。我会
select * from `brackets` where `tier` < $income从那里我会..。那么,您自己链接到了另一种语言的一些示例代码。你真的应该这样做。
如果您坚持不这样做,SQL可以做到:
DELIMITER $$
create procedure `calcTax`(IN v_param1 int)
begin
declare v_tier int;
declare v_rate decimal(3,3);
declare v_untaxed int default 0;
declare v_taxTotal float default 0;
set v_untaxed = v_param1;
set v_taxTotal = 0;
while v_untaxed > 0 do
select max(`tier`), max(`rate`) into v_tier, v_rate
from `brackets` where tier < v_untaxed order by `tier` desc limit 1;
set v_taxTotal = v_taxTotal + (v_untaxed - v_tier) * v_rate;
set v_untaxed = v_tier;
end while;
select v_taxTotal;
end;
$$正确的数据类型由您决定。你需要一个能解决问题的税级表。我在下面做了一个测试(使用糟糕的数据类型)。
create table brackets (tier int primary key, rate float);
insert into brackets values (0, 0), (10000, 0.1), (50000, 0.2);发布于 2010-04-22 22:40:27
您可以创建一个MYSQL用户定义函数。http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html
https://stackoverflow.com/questions/2691709
复制相似问题