Member 12995602 Ответов: 2

Как получить "бегущую сумму" или бегущую сумму командных баллов в SQL?


Привет
Приведенный ниже код работает для того, чтобы давать мне еженедельные баллы для команды из 4 игроков.

Как мне получить текущий итог?

Попробовал несколько способов, но безуспешно.


РЕДАКТИРОВАТЬ: для тех, кто следит за этой нитью, вот некоторые тестовые данные:

(
   select
       '01' as Week,
       4 as TeamNum,
       1 as GameNum,
       684 as Gm1,
       810 as Gm2,
       659 as Gm3
   union select
       '02' as Week,
       4 as TeamNum,
       2 as GameNum,
       667 as Gm1,
       810 as Gm2,
       659 as Gm3
   union select
       '03' as Week,
       4 as TeamNum,
       3 as GameNum,
       506 as Gm1,
       810 as Gm2,
       659 as Gm3
   union select
       '04' as Week,
       4 as TeamNum,
       4 as GameNum,
       668 as Gm1,
       810 as Gm2,
       659 as Gm3
   union select
       '05' as Week,
       4 as TeamNum,
       5 as GameNum,
       688 as Gm1,
       810 as Gm2,
       659 as Gm3) as testData


Извините за путаницу, но предыдущий ответ работал частично и не замечал этого до сегодняшнего дня.
Он давал результат бегового итога, но не разделялся между командами.
Когда я пробовал разные варианты группировки по " неделям "или" командам", ничего не получалось.
Спасибо за решения, но я приведу некоторые фактические примеры данных и ожидаемый результат для уточнения.

1.
table b_Scores
Week	TeamNum	Gm1	Gm2	Gm3	Total	Won	Lost
01	1	283	263	323	  869	2	1
01	2	798	768	703	2,269	1	2
01	3	599	701	580	1,880	2	1
02	1	446	384	456	1,286	0	3
02	2	748	811	738	2,297	1	2
02	3	550	551	491	1,592	3	0
03	1	405	380	395	1,180	3	0
03	2	683	787	803	2,273	0	3
03	3	564	694	604	1,862	3	0

2.
table b_Matches
MatchWk	MatchTm	WON	LOST
1	1	2	1
1	2	1	2
1	3	2	1
2	1	0	3
2	2	1	2
2	3	3	0
3	1	3	0
3	2	0	3
3	3	3	0

3. Ожидаемый Результат.
RESULT EXPECTED
Week	Team  Num	Gm1	Gm2	Gm3	Total	Rtotal	Won	Lost	Total  Wins	Total Losses
1	1	283	263	323	  869	  869	2	1	2	1
1	2	798	768	703	2,269	3,138	1	2	3	3
1	3	599	701	580	1,880	5,018	2	1	5	4
2	1	446	384	456	1,286	1286	0	3	0	3
2	2	748	811	738	2,297	3,583	1	2	1	5
2	3	550	551	491	1,592	5,175	3	0	4	5
3	1	405	380	395	1,180	1180	3	0	3	0
3	2	683	787	803	2,273	3,453	0	3	3	3
3	3	564	694	604	1,862	5,315	3	0	6	3

What I have tried:

<pre>SELECT 
    Week, 
    TeamNum , 
    Gm1, 
    Gm2, 
    Gm3, 
    Gm1 + Gm2 + Gm3 AS total, 
    @rt := @rt + Gm1 + Gm2 + Gm3 AS rt 
FROM 
     b_Scores
        
join (SELECT @rt:=0 ) as dummy

Это мой код с включенным предыдущим ответом.
(SELECT 'Week', 'TeamNum', 'Gm1', 'Gm2', 'Gm3','Total', 'rt' ,'Won', 'Lost', 'Ttl Wins', 'Ttl Losses')
UNION
( SELECT
 Week,
 TeamNum,
FORMAT( SUM(Gm1),0) AS "Gm1", 
FORMAT( SUM(Gm2),0) AS "Gm2", 
FORMAT( SUM(Gm3),0) AS "Gm3", 
Format(SUM(Gm1)+ SUM(Gm2)+ SUM(Gm3),0) as "Total",
@rt := @rt + Gm1 + Gm2 + Gm3 AS rt , 
  WON,  LOST, 
Format(SUM(won),0) as "TtlWins",
Format(SUM(lost),0) as "TtlLosses" 
FROM b_Scores R 
	JOIN (SELECT @rt:=0 ) as dummy
    JOIN b_Matches 	
    ON Week = MatchWk 	AND TeamNum = MatchTm
/* WHERE Week < 4 and TeamNum < 4 */
GROUP BY TeamNum, Week 
ORDER BY `TeamNum`,`Week`)

Результат:
Week	TeamNum	Gm1	Gm2	Gm3	Total	rt	Won	Lost	Ttl Wins	Ttl Losses
1	1	283	263	323	869	418	2	1	4	2
2	1	446	384	456	1,286	5463	0	3	0	9
3	1	405	380	395	1,180	10562	3	0	9	0
1	2	798	768	703	2,269	1459	1	2	4	8
2	2	748	811	738	2,297	6946	1	2	4	8
3	2	683	787	803	2,273	11853	0	3	0	12
1	3	599	701	580	1,880	3516	2	1	8	4
2	3	550	551	491	1,592	8960	3	0	12	0
3	3	564	694	604	1,862	14066	3	0	12	0

В этом результате возникли следующие ошибки.
1. РТ (нарастающим итогом) не работать при группировке по неделям и команды.
2. Общая сумма выигрышей или проигрышей не рассчитана должным образом. Добавил эту часть, потому что мне было трудно включить предыдущий код в мой код, когда у меня были дополнительные соединения.

Надеюсь, что эти дополнительные данные помогут внести ясность.

Andy Lanng

мало вопросов.
Это T-Sql (mssql) или какой-то другой sql?
какие данные у вас есть и чего вы ожидаете.
Я хотел бы знать, чтобы попытаться написать подходящее решение. С t-sql это должно быть очень просто

Member 12995602

Это Mysql.
Это должно прояснить ситуацию.
Неделю TeamNum Ганглиозид GM1, GM2 С Млрд. М3 Общая Потребность Это Рттл
01 4 684 810 659 2,153 2,153
02 4 667 714 787 2,168 4,321
03 4 506 543 661 1,710 6,031
04 4 668 670 696 2,034 8,065
05 4 688 660 712 2,060 10,125

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

2 Ответов

Рейтинг:
0

Peter Leow

Попробовать это:

SELECT Week, TeamNum , SUM(Gm1), SUM(Gm2), SUM(Gm3), 
SUM(Gm1 + Gm2 + Gm3) AS total,
(@rt := @rt + SUM(Gm1 + Gm2 + Gm3)) AS rt FROM tablename, (SELECT @rt:=0) as dummy GROUP BY Week


Member 12995602

Я получаю ошибку в строке 4.
Забыл упомянуть, что я использую Mysql pre 2012 версии.

Peter Leow

Какое сообщение об ошибке? Что находится в строке 4? Не ждите, что мы увидим ваш экран.

Member 12995602

Спасибо за помощь.

Рейтинг:
0

Andy Lanng

Я не мог заставить Решение 1 работать, поэтому сделал несколько настроек. Я надеюсь, что это точно:

SELECT 
	Week, 
    TeamNum , 
    Gm1, 
    Gm2, 
    Gm3, 
    Gm1 + Gm2 + Gm3 AS total, 
    @rt := @rt + Gm1 + Gm2 + Gm3 AS rt 
FROM 
     [tablename]
        
join (SELECT @rt:=0 ) as dummy