Я довольно новичок в SQL, и у меня небольшая проблема.поэтому у меня есть эта таблица «main.person», в которой есть значения «Balance» и «birthYear».Теперь я хочу сгенерировать статистику, которая показывает общий баланс 3 разных групп рождения.так, например, от минимума рождения года (самый старый) до 1/3 диапазона.затем от 1/3 диапазона до 2/3.затем от 2/3 до самого младшего (максимальное значение)
Я пытался сделать это с Ntile, но это не работает, потому что он не группирует диапазон в 3 группыдовольно хорошо, поскольку, например, 1958 год - это та же группа, которая равна 1, но также и группа 2. Любая помощь будет принята с благодарностью.Спасибо.
это мой код:
create or alter procedure main.generateStatistics
as
begin
declare @bracket table(
balance numeric(9,2) not null,
bracket nvarchar(20))
insert into @bracket([balance],[bracket])
SELECT balance, NTILE(3) OVER(ORDER BY birthYear) from main.person p) as z
set @group1 = (select sum(balance) from @bracket
where bracket = 1)
set @group2 = (select sum(balance) from @bracket
where bracket = 2)
set @group3 = (select sum(balance) from @bracket
where bracket = 3)
insert into main.[stats](dateCollected,totalPeople,bracket1,bracket2,bracket3)
values(SYSDATETIMEOFFSET(),(select count(*) from main.person), @group1, @group2,@group3)
end;
пример того, как я хочу, чтобы моя группировка была
set @group1=(
select sum(balance) from main.person p
where birthYear <= 1959)
set @group2=(
select sum(balance) from main.person p
where birthYear >= 1960 and birthYear <= 1979)
set @group3=(
select sum(balance) from main.person p
where birthYear >= 1980)
[![image](https://i.stack.imgur.com/Rpej7.png)