Diskuze: Rozdíl mezi dvěma sloupci dvou tabulek
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 16 zpráv z 16.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Nevim, co je tohle za sql podoba. Nejaka nestandartni. Vubec, cestina v sql
zapisu nema, co delat
"nejde mi vytvořit jedinečný sloupec" - co to presne znamena?
Je zvlastni, ze tam davat INNERJOIN.
Jsi si jisty, ze hodnoty v obou tabulkach jsou validni? Ze je muzes vzajemne
porovnavas? Stejny typ sloupce, spravna hodnota? Zadna treba prazdna mezera,
stringy pro matematicke operace a podobne?
Takhle nejak bych to napsal v normalni db.
SELECT
`a`.`Den`,
`a`.`Čas`,
`a`.`.kWh`,
(`a`.`kWh` - `b`.`kWh`) AS `DIFERENCE`
FROM
`DGR_Data` `a`
LEFT JOIN `RE_Data` `b` ON `a`.`Čas` = `b`.`Čas` AND `a`.`Den` = `b`.`Den`
ORDER BY
`a`.`Den` ASC
u te podminky joinu si ted nejsem jisty, zda
`a`.`Čas` = `b`.`Čas` AND `a`.`Den` = `b`.`Den` nebo
`b`.`Čas` = `a`.`Čas` AND `b`.`Den` = `a`.`Den`
Tez je zvlastni, ze tam neuvazujes vubec rok. A prave mi prijde divne, ze to
mas takto, zavani mi to prave tim, ze tam mas stringy misto cisel.
Pise to nejakou chybu? Nebo, co to dela?
Děkuji za reakci.
Data validní jsou a obě tabulky exportovány přes SaveToDB. Den je datetime
(rok a měsíc) a mám to pojmenovaný jako den, protože se jedná jen o rok.
Čas je 0-24h .S časem mám problém takový, že to nedokážu exportovat z
SaveToDB jako time, ale jako (0,0416666666666667) i za předpokladu, že v
excelu formát čas je. Při napojení zpět na excel mi to čas ukazuje, tak to
zatím neřeším. Jak mně a i Tobě to funguje stejně.U obou problém
řazení ,nebo duplikaci. Vše 4x... Tvá vlevo, má vpravo.
Podmínky JOINU řeší stále stejný výstup.
No, u excelu bych nejakou spolehlivost hned vyloucil Ale, rekneme, ze dotaz vypsal, co
vypsal a ze je to asi dobre.
Dobre, jinak, zapomen na join, uplne ten radek zrus. Co vypise dotaz bez join?.
musi vypsat 4 radky. A pridej si tam id radku. Jestli se nepletu, tak mas v te
puvodni tabulce 4 radky. Tos ale nerek, ze potrebujes poscitat 4 radky podle
nejakeho, jakeho klice? Mohl jsi dat ten obrazek hned, by se to dalo vycist,
kdyz to neumis napsat slovy
Slucovani radku se dela pres GROUP BY, s normalnim sql. Zadava se tam klic stejny pro slucovane 4 radky. Soucet se dela pres SUM.
SELECT
`a`.`Den`,
`a`.`Čas`,
`a`.`.kWh`,
SUM(`a`.`kWh`) AS `suma`
FROM
`DGR_Data` `a`
GROUP BY
`a`.`Den`,
`a`.`Čas`
ORDER BY
`a`.`Den` ASC
Pro zajímavost ještě data s kterýma pracuji. Řazení podle ID není
možné, protože se aktuálními daty RE_Data budou měnit. A 4 řádky právě
nepotřebuji to je špatně a
proč to vypisuje čtyři řádky nemám zdání a ani podle čeho to
vypočítává.
Neslo byto exportovat do csv, 100 radku z te tabulky 1, 2? A jeste teda to serad podle den ASC, cas ASC. Zatim tipuji, ze tam tu hodnotu mas skutecne 4x. Nebo za to muze ten join.
A v tom dotazu, jak mas order by, tak by tam melo byt ORDER BY A.Den ASC, A.Cas ASC
Tez je divne, proc u toho joinu mas prvni cas a ne datum. Ale, treba na poradi nesejde a funguje to rychleji, kdyz je cislo prvni nez string.
OFFSET 0 ROWS je dalsi priklad. Pokud to chces radkovat, tak
ORDER BY
...
OFFSET
0 ROWS
Jak pocitas rozdil, a-b, tak si tam muzes nechat zobrazit dalsi sloupce,
treba a.id, b.id. Neco, podle ceho jsi schopen zjistit, jake radky se vlastne
srovnavaji. Pokud tam nemas id, tak musi stacit ty kwh, co uz tam mas,
vidim.
Treba, pro ten prvni den tam mas
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=0
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=2 --- tyto hodnoty na tom obrazku
nevidim
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=63 --- tyto hodnoty na tom obrazku
nevidim
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=0
Takze ti nedokazi rict, proc tam jsou. Kdezto, kdybys mel id, tak id radku uz v
tech tabulkach najdes a nemuze to byt zadna jina hodnota, pokud je id
unikatni.
No, ale jestli tam mas skutecne 4 radky, tak to musis grupovat. Pokud jsou vsechny ty hodnoty platne a meli by se secit nebo neco tak. To uz jsem psal.
Cili, tohle bych provedl pro jednu i druhou tabulku. A tam by se melo ukazat,
ze ty hodnoty tam jsou skutecne 4x. A bud je to chyba nebo to tam musi byt. To
bys mel vedet ty.
Cili, prvnich 100 radku z tech serazenych tabulek.
SELECT
`a`.`id`,
`a`.`Den`,
`a`.`Čas`,
`a`.`.kWh`,
FROM
`DGR_Data` `a`
ORDER BY
`a`.`Den` ASC, `a`.`Čas` ASC
Moje chyba a nepozornost :-/ Neuvědomil jsem si jednu zásadní věc a to,
že sbírám data ze 4 tabulek...Takže to je důvod proč se datum opakoval 4x
Každopádně vyřešeno díky Tobě. Děkuji
Rád bych se ještě optal. Zmiňoval csv. Ano, možnost exportu tu je. Je
lepší pracovat s csv? Jsou kvalitnější?
Každý den musím stahovat 4 výrobny a sjednotit (sečíst) a dále najít
rozdíly nominace a skutečnosti ( vše výše
Je jiná automatizovaná metoda, než vše otvírat v excelu , zpracovat v Power
Query a přes SaveToDB aktualizovat sql?
No, nenapsal jsi v dotazu, v jakou pouzivas databazi. Tech je asi 100 druhu.
Pak se dost spatne googluje, co s tim.
Pak jsi zminil excel. Cili, mas nejspis nejaky nastroj, ktery umi pracovat s
excelovym souborem. excel umi import / export z csv. Csv je textovy soubor
zapisu dat jedne tabulky. Pouziva se to obcas pro import do databaze.
K cemu mi je csv? Kdybych mel tva data, tak si to muzu nasimulovat u sebe a
vyzkouset si ty dotazy. Normalne by se mi to nechtelo, ale mas tam jen 3-4
sloupce
Poloz si jinou otazku? K cemu jsou nam obrazky? Pekne to videt. Ale z obrazku
nemuzes udelat ctrl+c / v. Treba tam mas jakysi kod, sql dotaz, ten si nemuzeme
zkopirovat a udelat v nem zmeny. Ale, museli by jsme to opsat. To se nam co?
nechce. Pri opisovani snadno udelas chybu. Tak pak jako takovy dotaz ma 0
reakci, treba.
Prima, ze se na to prislo, ze to mas vlastne spravne. Tam pridej cislo tabulky, treba, jako jeden sloupec .
Ano. Máš pravdu. Obrázky jsou zkrátka jen obrázky
No, stahuji data xls (excel) z Protagonu a exportuju je přes SaveToDB do SQL
server 2019 a pak zpracovávám (nějak).
Pokud máš tedy chuť si to nasimulovat, čehož si vážím, tak přikládám
data. A také dotazy.
Když to tak teď vidím, tak bych rád záporný rozdíl měl opět sečtený
po dnu v dalším sloupci
Další přehledný sloupec.
--CREATE VIEW [dbo].[RE_Data_sloučení] AS
SELECT
Den,
Čas,
--A.kWh as Dgr_kWh,
SUM(kWh) AS suma
FROM
[dbo].[RE_Data]
GROUP BY
Den,
Čas
--kWh
--B.Den,
--A.Čas,
--B.Čas,
--B.kWh
ORDER BY
Den ASC, Čas ASC OFFSET 0 ROWS
go
--CREATE VIEW [dbo].[DGR_RE_Diference] AS
SELECT
A.Den,
A.Čas,
A.kWh as Dgr_kWh,
B.suma as RE_kWh,
(A.kWh - B.suma) AS Rozdíl
FROM
DGR_Data A
LEFT JOIN [dbo].[RE_Data_sloučení] B ON B.Den = A.Den AND B.Čas = A.Čas
ORDER BY
A.Den ASC , A.Čas OFFSET 0 ROWS
go
Mozna by sis mel ujasnit... Mas data ze 4 tabulek. Co s tim?
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=0
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=2 --- tyto hodnoty na tom obrazku nevidim
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=63 --- tyto hodnoty na tom obrazku nevidim
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=0
No, a ty prijdes s nejakou treti varianout, secist jen zaporna cisla a pridat
tam sloupec s Ano / -. Cili,
pro kazdy zaporny radek se ma objevit ano, ale stale to maji byt 4 radky? to by
pak byla nejspis kombinace "LEFT JOIN (SELECT ...) tmp".
Navic, v tuto chvili neni uplne jiste, se kterymi hodnotami se dela rozdil
A B
t1 1 t1 7
t1 2 t1 4
t1 6 t1 2
out
A0 - B0
A1 - B0
A2 - B0
Takhle funguje LEFT JOIN. Bys musel pouzit JOIN a pak bys tam mel 16 radku
Ono se není čemu divit, když s tím nepracuju a není to má hlavní
náplň
Ty to vidíš a víš hned, já musím pátrat...
Nebo hadal z dostupnych informaci
Zobrazeno 16 zpráv z 16.