Vánoční nadílka Vánoční nadílka
Vánoční akce! Daruj lepší budoucnost blízkým nebo sobě. Až +50 % zdarma na dárkové poukazy. Více informací

Diskuze: Vložení výpočtu do tabulky

Ostatní jazyky SQL SQL a databáze Vložení výpočtu do tabulky

Aktivity (1)
Avatar
Viktória
Člen
Avatar
Viktória :28. listopadu 10:19

Mám problém s vložením výpočtu do již vytvořeného prázdného sloupce v tabulce. Půdní tabulka:

id y sum y
1 1 NULL
2 2 NULL
3 3 NULL

Sum y vypočítam pomocí SELECT SUM(y) OVER(ORDER BY id), to funguje, avšak už žádným způsobem se mi nedaří vložit výsledek to tabulky.

Zkusil jsem: Zkoušela sem:
Insert into table1 (sum y) SELECT SUM(y) OVER(ORDER BY id) FROM table1 where id>=1;
Update table1 set sum y= (SELECT SUM(y) OVER(ORDER BY id)) FROM table1 where id>=1;
.. a různé obměny, ale nic z toho nefunguje...Tyto příkazy jsme měla odzkoušené a při jiných výpočtech jsem s tím neměla žádný problém.

Chci docílit: Výslední tabulka by měla být :

id y sum y
1 1 1
2 2 3
3 3 6

Vždy tedy potřebuji sečíst všechny předchozí řádky v sloupci y a jejich sumu vložit do sum y.

Ďekuji za rady

 
Odpovědět 28. listopadu 10:19
Avatar
Roman
Člen
Avatar
Odpovídá na Viktória
Roman:28. listopadu 11:12

Ten SELECT musis umistit za UPDATE ne za SET viz priklad

UPDATE
  table1
  (SELECT SUM(y) AS ysum FROM table1) AS rr
SET result=rr.ysum
WHERE result IS NULL;
 
Nahoru Odpovědět 28. listopadu 11:12
Avatar
Roman
Člen
Avatar
Roman:28. listopadu 11:40

Zapomnel jsem na carku

UPDATE
  table1,
  (SELECT SUM(y) AS ysum FROM table1) AS rr
SET result=rr.ysum
WHERE result IS NULL;
 
Nahoru Odpovědět 28. listopadu 11:40
Avatar
plelovsky
Člen
Avatar
Odpovídá na Roman
plelovsky:28. listopadu 11:43

A zkusil jsi co to udělá?

 
Nahoru Odpovědět 28. listopadu 11:43
Avatar
Roman
Člen
Avatar
Odpovídá na plelovsky
Roman:28. listopadu 11:49

Ne nezkousel. Proc bych mel? Ale kdyz uz ses zeptal tak jsem to hodil do dbfiddle a funguje jak ma na vutvorene vzorove tabulce naplnene daty. Ja jsem neuvedl prsne to co tazatelka chce jen jsem napsal jak ma postupovat. Myslim, ze neni cilem diskuze psat hotova reseni, ale pomahat si k nim dojit.

 
Nahoru Odpovědět 28. listopadu 11:49
Avatar
plelovsky
Člen
Avatar
plelovsky:28. listopadu 11:55
UPDATE t
SET
    t.[sum y] = s.sum
FROM
    table1 t
    INNER JOIN (
           SELECT
                    id
                  , sum = SUM(y) OVER (ORDER BY id)
           FROM
                  table1
    ) s ON s.id = t.id
;

BTW Používat mezery, diakritiku, interpunkci v názvech je blbost.

 
Nahoru Odpovědět 28. listopadu 11:55
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.