세금과 유사한 IRS 함수 Calculating revenue share at different tiers을 SQL로 변환하려고합니다. 테이블이 하나의 열 (가격)이고 계층이 동적으로 추가된다고 가정합니다.IRS 함수와 같은 세금을 SQL로 변환
첫 번째 시도에서 제대로 작동하지 않는 몇 가지 사례가 있습니다. 내가 그 이후 스크랩 : :) 도와 줘서 고마워!
세금과 유사한 IRS 함수 Calculating revenue share at different tiers을 SQL로 변환하려고합니다. 테이블이 하나의 열 (가격)이고 계층이 동적으로 추가된다고 가정합니다.IRS 함수와 같은 세금을 SQL로 변환
첫 번째 시도에서 제대로 작동하지 않는 몇 가지 사례가 있습니다. 내가 그 이후 스크랩 : :) 도와 줘서 고마워!
MYSQL 사용자 정의 함수를 만들 수 있습니다. http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html
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);
응답 해 주셔서 감사합니다. 이것은 올바른 방향으로 나아가는 단계입니다. 값의 행 (가격 등)이있는 테이블에서이 작업을 실행할 수 있기를 바랬습니다. 계층은 동적이며 쿼리와 함께 전달됩니다. 이것은 반대의 접근법을 취하는 것처럼 보입니까? – CrashRoX
그런 다음 조회 할 값이있는 임시 테이블을 만들고이 테이블 이름을 두 번째 매개 변수로 쿼리에 전달하여이 문제를 해결할 것을 제안합니다. 내가 가진 것을 가지고 가서 거기에서 일할 수 있어야합니다. 나는 왜 당신이 데이터베이스에 계산 작업에 중점을두고 이것을하고 있는지에 대해 매우 궁금합니다. –
나는 코드 버전을 고집했다. 당신이 옳았고 그것이 가장 합리적이었습니다. 시간과 제안에 감사드립니다. – CrashRoX
사용자 정의 함수없이 스트레이트 SQL로 할 수 있다고 생각하십니까? – CrashRoX