abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 00:33 | Zajímavý projekt

Byl spuštěn Humble Caffeine Bundle. V balíčku počítačových her jsou také hry běžící na Linuxu: GoNNER BLüEBERRY EDiTION, This War of Mine, Ken Follett's The Pillars of the Earth, Tyranny a Shadow Tactics: Blades of the Shogun.

Ladislav Hagara | Komentářů: 0
dnes 00:11 | Nová verze

Po roce vývoje od vydání verze 3.0 a více než 6 000 změnách byla vydána nová stabilní verze 4.0 softwaru, který vytváří aplikační rozhraní umožňující chod aplikací pro Microsoft Windows také pod GNU/Linuxem, Wine (Wikipedie). Z novinek lze zdůraznit například podporu Vulkanu nebo Direct3D 12. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 1
včera 20:44 | Nová verze

Byla vydána verze 11.7 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností i s náhledy v příspěvku na blogu.

Ladislav Hagara | Komentářů: 0
včera 17:22 | Bezpečnostní upozornění

V balíčkovacím systému APT používaném v Debianu a z něj vycházejících linuxových distribucích byla nalezena bezpečnostní chyba CVE-2019-3462. Útočník může vzdáleně spustit libovolný příkaz pod právy roota.

Ladislav Hagara | Komentářů: 4
včera 17:00 | Nová verze

Canonical oznámil vydání Ubuntu Core 18. Nová verze Ubuntu Core vychází z Ubuntu 18.04 LTS a podporována bude 10 let. Jedná se o placenou podporu. Ubuntu Core je určeno pro IoT (internet věcí) a vestavěné systémy.

Ladislav Hagara | Komentářů: 0
včera 15:31 | Nová verze

Vyšlo Pharo 7.0 (otevřená implementace Smalltalku). Nyní je kompletně bootstrapováno ze zdrojových kódů spravovaných Gitem, má nové nástroje na procházení a editaci kódu a přináší mnoho dalších změn a oprav. Popis novinek v češtině.

Pavel Křivánek | Komentářů: 0
včera 02:22 | Nová verze

Byla vydána verze 4.5 linuxové distribuce Parrot (Wikipedie). Jedná se o linuxovou distribuci založenou na Debianu a zaměřenou na penetrační testování, digitální forenzní analýzu, reverzní inženýrství, hacking, anonymitu nebo kryptografii.

Ladislav Hagara | Komentářů: 2
21.1. 17:22 | Pozvánky

V sobotu 23. února se uskuteční 6. ročník WordCampu – největší konferenci o WordPressu v ČR. Ke konferenci probíhá i soutěž typu CTF (Capture The Flag) o volné vstupenky, kde si lze zkusit zneužít běžné bezpečnostní chyby.

smíťa | Komentářů: 0
21.1. 17:11 | Pozvánky

Letošní ročník konference Prague PostgreSQL Developer Day se bude konat 13. a 14. února v prostorách FIT ČVUT. Program konference najdete na stránkách konference, stejně jako registrační formulář.

TomasVondra | Komentářů: 0
21.1. 16:55 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě v nástroji pro správu databází v jednom PHP souboru Adminer. Chyba je už půl roku opravena. Stačí Adminer aktualizovat.

Ladislav Hagara | Komentářů: 4
Používáte USB Type-C?
 (20%)
 (16%)
 (11%)
 (12%)
 (38%)
 (4%)
 (43%)
Celkem 468 hlasů
 Komentářů: 0
Rozcestník

Dotaz: Firebird, SUM a zmena hodnoty

13.9.2017 23:04 Tom
Firebird, SUM a zmena hodnoty
Přečteno: 1303×
Dobry den, chtel bych pozadat o radu se selectem v DB Firebird. Je mozne na zaklade hodnoty v jednom sloupci zmenit hodnotu v druhem sloupci a nasledne spocitat SUM toho druheho sloupce? Priklad:
popis    hodnota

minus    10
bbb      -30
plus     50
cccc     2
minus    25
potreboval bych vybrat pouze radky ktere obsahuji v prvnim sloupci "plus" nebo "minus", tam kde je "minus" tak zmenit znamenko v sloupci hodnota a udelat SUM(hodnota). Takze -10+50-25

Normalni SUM delam takto:
select sum(t1.hodnota)
from tabulka t1
where t1.popis like 'plus' or t1.popis like 'minus'
Jde nejak doplnit ten select a dostat pozadovany vysledek?

Dekuji. Tom

Řešení dotazu:


Odpovědi

13.9.2017 23:42 zdenek
Rozbalit Rozbalit vše Re: Firebird, SUM a zmena hodnoty
select sum(iif(t1.popis = 'minus', t1.hodnota * -1, t1.hodnota)) from tabulka t1
14.9.2017 01:30 Tom
Rozbalit Rozbalit vše Re: Firebird, SUM a zmena hodnoty
To je ono, dekuji. Tom
14.9.2017 07:17 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Firebird, SUM a zmena hodnoty

Tohle tam přičte i druhý a čtvrtý řádek, takže byste buď musel přidat

  ... where t.popis in ('plus','minus')

nebo místo iif použít case:

  case T1.POPIS when 'plus' then T1.HODNOTA when 'minus' then -T1.HODNOTA else 0 end

A nebo obecněji

  create table NAME2COEF (
    NAME varchar(16) primary key,
    COEF integer
  );
  insert into NAME2COEF values ('plus', 1);
  insert into NAME2COEF values ('minus', -1);

  select sum(NC.COEF * T.HODNOTA) from
    TABULKA T inner join NAME2COEF NC on NC.NAME = T.POPIS;

Nakonec ale stejně často nejjednodudšší bude udělat dva obyčejné selecty a odečíst výsledky.

22.9.2017 11:53 ehmmm
Rozbalit Rozbalit vše Re: Firebird, SUM a zmena hodnoty
Se zacatkem v podstate souhlas. Za predpokladu, ze by t.popis byl indexovany, tak bych samozrejme preferoval ten where.

Tabulka NAME2COEF je z pedagogickeho duvodu dobra, ale v tomto pripade to je nejspis kanon na vrabce.

A celkem nesouhlas s posledni poznamkou se dvema selecty. Proc se ptat serveru dvakrat, kdyz to muzu vyridit jednim dotazem? Podle me ty dva jednodussi dotazy nikdy nebudou efektivnejsi nez jeden slozitejsi. (?)
22.9.2017 16:07 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Firebird, SUM a zmena hodnoty

Tohle je prostě potřeba řešit případ od případu a hlavně s ohledem nejen na aktuální situaci, ale i na výhled do budoucna. Pokud mám jistotu, že ty váhy budou na věky věků vždy jen tyhle dvě, tak to klidně udělám kterýmkoli z těch jednodušších postupů. Ale pokud bude riziko, že jich časem bude víc nebo že se dokonce budou měnit, jdu do referenční tabulky. Tohle je problém podobných dotazů v poradně, protože optimální řešení často závisí na informacích, které nemáme - a někdy je v daném okamžiku nemá ani tazatel.

Stejně je to i s tou závěrečnou poznámkou. Teoreticky je "jeden dotaz" efektivnější než "dva dotazy", ale praxe může být často jiná, pokud se kvůli tomu, aby to byl "jen jeden dotaz" budou dělat moc velké vylomeniny. Nemluvě o tom, že dva selecty nemusejí nutně znamenat dva samostatné dotazy klienta na server.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.