Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
Využij akce až 80 % zdarma při nákupu e-learningu - více informací. Zároveň pouze tento týden sleva až 80 % na e-learning týkající se Swift
discount week 80
Avatar
informatik87
Člen
Avatar
informatik87:24.12.2019 13:10

Provést Update se Selectem kde se vypočítává medián.

Zkusil jsem: Různé příkazy nalezené na Googlu s menšími úpravami.

Chci docílit: Ahoj, potřeboval bych pomoc s jedním sql dotazem. Potřebuji do jedné tabulky vložit vypočtený medián z jiné tabulky. Abych byl přesnější, tak v jedné tabulce mám sloupce 'oblast' - kde je číselný identifikátor, a sloupec 'median', kde chci vložit vypočtený medián. Ten medián by se měl počítat z druhé tabulky, kde je opět sloupec s oblastí a sloupec kde jsou ceny pro jednotlivé nemovitosti.

Zkoušel jsem něco takového:

DECLARE @hodnota bigint

SET @hodnota = (SELECT DISTINCT oblast,
      PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER by cena)
        OVER(PARTITION BY oblast) AS cena_median
        FROM tabluka2 WHERE oblast= 1)

UPDATE tabulka1 SET cena_median= @hodnota
WHERE oblast= 1;

Děkuji za pomoc a přeji příjemné svátky!

Editováno 24.12.2019 13:11
 
Odpovědět
24.12.2019 13:10
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Jan Stodůlka
Redaktor
Avatar
Jan Stodůlka:8.4.2020 21:57

Už to asi nebude aktuální, ale dá se to takto.
Update uděláš nad tabulka1. Do where to omezíš na požadovanou oblast nebo to necháš updatnout pro všechny oblasti.
V klauzuli SET si spočítáš ten meridián. V subselectu se na požadovanou oblast odkážeš pomocí tabulka1.oblast.
Jen pozor aby subselect vracel max jeden záznam a jeden sloupec, jinak to padne na chybu.

UPDATE tabulka1
SET cena_median =
(SELECT PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER by t2.cena)
        OVER(PARTITION BY t2.oblast)
        FROM tabluka2 t2 WHERE t2.oblast= tabulka1.oblast)
WHERE oblast= 1;

PS: Select jsem nezkoušel (nemám ty tabulky), tak nevím zda nebude třeba upravit část za SELECT.

Nahoru Odpovědět
8.4.2020 21:57
Nechodím do hospody, protože doma programuji.
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 2 zpráv z 2.