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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

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

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 0
včera 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 24
včera 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 26
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (23%)
 (29%)
 (8%)
 (5%)
 (3%)
Celkem 783 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: select z databaze

24.1.2010 11:27 Peta
select z databaze
Přečteno: 554×
Ahojte, chci vybrat z databaze tabulku, ale tak, aby ty data byly setrizene podle jednoho elementu. Nejdrive aby byly radky tabulky, ve kterych je tento element null a pote zbytek tech elementu, ve kterych ma tento element nejakou hodnotu.

PS: order by by nejspise sel, ale jak se zachova, kdyz ten element je null a chci ho nejdrive?

Moc diky

Řešení dotazu:


Odpovědi

24.1.2010 12:00 peksha | skóre: 10 | Ostrava
Rozbalit Rozbalit vše Re: select z databaze
Zkus
ORDER BY tab.atribut ASC; (vzestupne)
nebo
ORDER BY tab.atribut DESC; (sestupne)
- jedno z toho by Ti to melo dat na zacatku ;-)
Tady by bylo tak krasne nebyt tech vos...
24.1.2010 13:43 Peta
Rozbalit Rozbalit vše Re: select z databaze
diky vyzkousim :)
27.1.2010 11:39 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: select z databaze
Ne nutně.
Řešení 1× (krtek007)
24.1.2010 14:28 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: select z databaze
ORDER BY řadí NULL buď na začátek nebo na konec, záleží na použité databázi. Pokud vaše databáze řadí zrovna opačně, než jak potřebujete, použijte COALESCE() – jako první hodnotu zadáte sloupec, podle kterého se má řadit. Když bude NULL, použije se druhá hodnota v pořadí – a tam zadejte co nejmenší nebo co největší přípustnou hodnotu (podle toho, kam chcete prázdné hodnoty řadit).
27.1.2010 11:11 Tomáš
Rozbalit Rozbalit vše Re: select z databaze
order by case when A.x is null then 1 else 0 end, A.x 

Záměnou 0 a 1 můžete řídit zda chcete záznamy s NULL na konci nebo na začátku.

<rejpanec>Žádné šílenosti typu NULL FIRST opravdu nejsou potřeba.</rejpanec>

27.1.2010 11:41 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: select z databaze
Dají se obejít, ale hodí se - třeba kvůli efektivitě, které ta vaše konstrukce zrovna dvakrát nepřispívá.
27.1.2010 12:18 cronin | skóre: 48
Rozbalit Rozbalit vše Re: select z databaze
Alebo to vyriesit by design a nemat v databaze NULL hodnoty tam, kde sa ocakavaju udaje. Ono vsetky tie NULL, null ci NIL veci su len technicke barlicky ako povedat, ze niekde, kde nieco ma byt, nic nie je. Uplne najhorsie je, ak nejaky null nesie informacnu hodnotu.

Nevravim, ze uvedeny pristup sa ma uplatnovat za kazdych okolnosti. Odporucam sa nad nim vsak aspon zamysliet, kedykolvek je kvoli vyskytu null nutne menit spravanie sa cohosi. Mozno najlepsi pristup, ako dany problem vyriesit, je zariadit, aby vobec nenastal.
27.1.2010 12:59 kulik
Rozbalit Rozbalit vše Re: select z databaze
<rejpanec>Jiste, proc to psat snadno citelnym deklarativnim zpusobem, kdyz muzu pouzit nekolikrat delsi case a navic tim jeste dosahnout nizsi vykonnosti.</rejpanec>

Jinak v Oracle nulls last|first.
28.1.2010 19:01 Tomáš
Rozbalit Rozbalit vše Re: select z databaze
Chtěl bych se zeptat z čeho plyne to tvrzení, o snížené výkonosti. Já osobně si dokážu představit pouze jeden velmi specifický a poněkud teoretický případ, kdy by mohla být varianta s case pomalejší než s frází null first/last. A je to tento případ:
  1. Vracíte tak veliký počet záznamů, že se výsledek nevejde do paměti.
  2. Select musí být nejvýše s frází where (žádné joiny a agregace, případně jen nejjednodušší select)
  3. Existuje (b-tree) index nad A.x ( který je řazen podle hodnoty a nikoliv podle hashe ), aby jste mohl využít existujícího řazení na tomto indexu.
  4. Optimizer umí v případě fráze where zkomutovat operátory where a order by. Umí takovou optimalizaci vůbec nějaká databáze?

Čitelnost je samozřejmě u nulls first lepší. A přenositelnost? Ta to pěkně odskákala ;-)

28.1.2010 19:10 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: select z databaze
Podmínka 1 je nadbytečná určitě, 2 jedině když je hloupý optimalizátor, 3 není nijak silný předpoklad. Podmínka 4 mi také připadá nadbytečná, pokud se bavíme o porovnání vaší varianty s explicitním nulls first. Přenositelnost u SQL? To je tak trochu utopie všeobecně, jedna praktická konstrukce to nezachrání.
29.1.2010 00:14 Tomáš
Rozbalit Rozbalit vše Re: select z databaze

Tak ještě jednou a detailněji:

Tvrzení první: pokud před operací sort budete dělat v selectu jinou libovolnou operaci tak si při ní dotyčný case předpočítáte a sort pak může být přeložen téměř úplně stejně jako v případě existence fráze null first/last. Důsledek prvního faktu: Aby bylo možné zlepšení, tak sort musí být první (jediná) operace.

Tvrzení druhé: Aby byl sort s null first efektivnější než case musí dojít k využití btree-indexu (řazeného dle hodnoty nikoliv hashe). Při nevyužití indexu bude složitost stejná v obou případech a to O(n*log n) bez ohledu na počet, a typ vstupů ve frázi order by.

Tvrzení třetí: Aby mělo využití indexu smysl nesmí se vám výsledek vejít do paměti. Pokud se vám tabulka vejde do paměti pak v rámci natažení do paměti uděláte i ten case a dále pokračujete podle tvrzení jedna. Pokud si někdo myslí že přes index to bude i v tomto případě rychlejší, tak je potřeba si uvědomit, že kromě kompletní tabulky musíte do paměti dostat z disku i ten index. O přístupu přes index by možná dalo polemizovat. Já se přikláním k názoru že cena čtení indexu z disku bude větší než cena kompletního třídění v paměti. Bavíme se o třídění relativně malé tabulky, která se vejde do paměti.

Tvrzení čtvrté: Pokud musí být sort první operací (viz tvrzení první a druhé) pak musí komutovat se všemi předchozími operacemi, tak aby se dostal na první místo a bylo možné index využít. Jediný takový případ je, že předchází jediná operace where, protože je to jediná operace, která je schopna zachovat relativní pořadí vět, které vypade ze sort operace. A navíc tato optimalizace musí podporována optimizérem. I zde by možná šlo polemizovat, že lze postavit join algoritmus, který by pořadí zachovával, ale obávám se, že na toto databáze běžně nepodporují.

Otázka zůstává: Z čeho plyne to tvrzení o snížené výkonosti? Rád se nechám poučit.

29.1.2010 01:15 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: select z databaze

1. hodnotu toho case si předpočítat sice můžete, ale stejně pro jeho hodnoty (ani pro kombinaci s hodnotami sloupce) nebude k dispozici index. Nebude-li tedy optimalizátor natolik chytrý, aby poznal, že vlastně maskujete chybějící nulls first a že tedy můžete použít index na příslušný sloupec (a to téměř jistě nebude), bude výsledek méně efektivní než použití nulls first.

2. Proti této podmínce stále nic nenamítám, ale nepovažuji ji za nijak silný předpoklad. Pokud podle toho sloupce potřebuji často řadit, index si na něm udělám.

3. Za prvé se opíráte o (podle mne chybný) závěr z bodu 1. Za druhé nepočítáte s velmi pravděpodobnou možností, že tabulka je sice malá, ale příslušné stránky (s tabulkou i indexem) už v paměti jsou načteny z dřívějška, kdy se vyhodnocoval jiný dotaz a nebyl tudíž důvod si předpočítat hodnotu toho case-výrazu.

4. Nevidím důvod, proč by join nebo group by musel obecně bránit použití indexu. Pár takových dotazů jsem si vyzkoušel a index se použil, na rozdíl od vaší konstrukce, která využití indexu zabránila zcela spolehlivě.

Kromě toho ve všech bodech automaticky předpokládáte, že rozšíření dotazu o umělý počítaný sloupec a řazení podle kombinovaného klíče místo jednoduchého nepřinese nic nestojí, což je IMHO zcela neopodstatněný předpoklad. Netvrdím, že to výkon sníží nějak zásadně, ale něco to stát bude.

29.1.2010 12:16 kulik
Rozbalit Rozbalit vše Re: select z databaze
Přenositelnost může být důležitá, ovšem jak kdy. Existuje řada aplikací, kde se přenositelnotst vůbec neřeší, protože je cílem vyždímat z použité platformy maximum právě prostřednictvím jejích specifik (za která se platí často milionové sumy). Typickým příkladem může být datový sklad.

Myslím že zaměňuješ výkon a jakousi obecnou složitost. Stejně tak bych mohl ignorovat descending třídění a aplikovat ascending vždy na vhodně upravenou hodnotu (např. pro čísla triviálně vynásobení -1), a pokud by neexistovaly vhodné indexy, nedošlo by pravděpodobně ke změně asymptotické složitosti, nicméně výkon by byl typicky nižší. I když odhlédneme od indexů (a to je hodně velké odhlédnutí), výpočet výrazu prostě něco stojí, stejně tak uložení sloupce, jistě že to je mnohem méně než např. přístup na disk a rozdíl může být klidně v promile, v principu to ale s "nulls first" může být nejhůře stejné jako s case (v případě "hloupé" databáze, která to dělá analogicky case) a připravuji se o možnost optimalizace u "chytré" databáze. O pokročilé optimalizaci typu query rewrite ani nemluvě. Obecně pokud přepíšu deklarativní věc na procedurální, připravuji se o spoustu optimalizačních možností databázového stroje.

27.1.2010 12:23 cronin | skóre: 48
Rozbalit Rozbalit vše Re: select z databaze
Zariadit, aby sa "prazdne" hodnoty plnili prazdnou ale validnou hodnotou, nie NULL-om. Vyplnit touto hodnotou aktualne NULL-y a pridat pre element obmedzenie NOT NULL. A nikdy viac dany problem nebude potrebne riesit, a to ani technicky (...ako napisat ORDER BY...) ani logicky (...if (value == null) {...} else {...}).
27.1.2010 12:37 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: select z databaze
Prázdná ale validní hodnota je v databázi právě NULL. Představte si, že mám třeba seznam článků, u kterých chci evidovat datum a čas, kdy byly vydány – ale u některých to prostě nevím. Samozřejmě si tam nebudu vymýšlet nějaké fiktivní datum, ale dám tam NULL. Pokud mám uložené i datum přidání záznamu, můžu pak řadit podle data vydání, pokud jej znám, jinak podle data přidání záznamu.
27.1.2010 17:42 cronin | skóre: 48
Rozbalit Rozbalit vše Re: select z databaze
Prázdná ale validní hodnota je v databázi právě NULL.
Technicky ano. Logicky to tak byt niekedy moze, ale nemusi, a spravidla ani nie je. Stale plati to o barlickach, co som pisal vyssie.
Představte si, že mám třeba seznam článků, u kterých chci evidovat datum a čas, kdy byly vydány – ale u některých to prostě nevím.
Tak to je dost desiva predstava a vasa aplikacia priam krici po poriadnom re-dizajne.
27.1.2010 17:55 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: select z databaze
Vítejte do reálného světa. Nechci vás moc děsit, ale těch případů, kdy nějaký údaj nevíme nebo dokonce neexistuje je spousta – prostřední jméno, titul před a za jménem, rodné číslo, číslo občanky, SPZ služebního auta, soukromý telefon, datum úmrtí, jméno manžela/manželky a další a další. Řešením není redesign aplikace, ale smířit se s tím, že reálný svět nezapadne dokonale do vašich tabulek se samým NOT NULL a databázi a aplikaci reálnému světu přizpůsobit. Berlička je cpát do datbáze nějaké umělé hodnoty, když tam potřebujeme uložit údaj „zde hodnota není“.
27.1.2010 18:12 cronin | skóre: 48
Rozbalit Rozbalit vše Re: select z databaze
Vítejte do reálného světa.
Profesionalne vyvijam software uz takmer desatrocie. Od reality som vzdialeny tych par hodin, co som prisiel z prace domov. Ak mi niekto povie, ze ma redakcny system, ktory eviduje datum publikacie clankov, ale pre niektore clanky datum nepozna, tak ho do svojho projektoveho timu zaradim len velmi opatrne (slusne povedane). Ale predpokladam, ze si len nestastne zvolil priklad. Na zaver uz len zacitujem sam seba:
Nevravim, ze uvedeny pristup sa ma uplatnovat za kazdych okolnosti. Odporucam sa nad nim vsak aspon zamysliet, kedykolvek je kvoli vyskytu null nutne menit spravanie sa cohosi.
27.1.2010 19:27 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: select z databaze
Já bych do svého projektového týmu zase nechtěl člověka, který vidí „seznam článků“ a čte „redakční systém“, a který si slovo „nezná“ vykládá jako „vlastně ho znát může“.
27.1.2010 18:39 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: select z databaze
No NULL se asi nevyhneme, ale je otázkou jestli u těchto uvedených, není lepší zvážit prázdný řetězec (mimo datumy) než NULL.
Povolené NULL na sloupec má své opodstatnění, ale čím méně tím lépe :).
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
27.1.2010 19:30 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: select z databaze
Třeba rodné číslo je devět nebo deset číslic, tomu ale prázdný řetězec neodpovídá. Navíc dotyčná osoba nemá prostřední jméno, nemá tituly, nemá rodné číslo – to je něco jiného, než že má prostřední jméno „“, to samé pro tituly nebo rodné číslo.
27.1.2010 20:46 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: select z databaze
čekal jsm tuto odpověď :), netvrdím, že se nemá použít NULL, jen bych s ním šetřil :)
Je na zvážení, „“ má v tomto případě stejnou vypovídající hodnotu jako NULL.
Je to jen úhlu pohledu prázdné jméno či titul je v reálném světe bez titulu beze jména, jméno „“ prostě neexistuje.
Jeho neexistenci můžu vyjádřit žádným jménem (jeho nulovou délkou) nebo 3tím stavem NULL, ale pak právě 2. stav „prázdné jméno“ je nedefinovaný stav, není to jméno ani to není absence jména (protože takové hodnoty jméno nemůže nabývat).
Prakticky budeme mít to stejné a záleží jen jak s tím pracujeme a jaké máme kontrolní mechanismy, ale pokud prázdné jméno neznamená něco je zbytečné definovat NULL.
Abych předešel ..., je mi jasné, že hodnoty typu 'N/A' se lépe vyjadřují s NULL, ale to nejdůležitější je zvážit jestli potřebujeme vyjádřit právě takovou hodnotu a ve výsledku nám to nepřidělá práci.
Vůbec nepochybuji o stavu NULL u datumu či časového razítka, pokud chci umožnit nezadáno, tam prostě hodnota '0' je něco jiného.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
27.1.2010 21:52 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: select z databaze
Je to jen úhlu pohledu prázdné jméno či titul je v reálném světe bez titulu beze jména, jméno „“ prostě neexistuje.
Tímhle postupem (jméno „“ neexistuje, tak to použiju místo nezadané/neznámé hodnoty) si koledujete o to, že se vám do databáze brzo dostane někdo, kdo má opravdu prázdné jméno. U toho jména to je sice opravdu dost nepravděpodobné, ale podobné „naschvály“ se dějí poměrně často. takže pokud je někde význam „hodnota neznámá nebo neexistuje“, dám tam raději NULL, i když třeba jinak není přípustný prázdný řetězec nebo tam mají být kladná čísla a tedy bych mohl použít prázdný řetězec nebo 0 či -1. Protože za chvíli si někdo vzpomene, že vlastně prázdný řetězec má taky nějaký význam, nebo že se připouští i nula či záporná čísla.
27.1.2010 23:29 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: select z databaze
Může být :), mívám sám někdy u takovýchto polí NULL povoleno, nicméně vždy se hodně zamyslím jestli opravdu to zlé nepěkné vybočující NULL tam povolím a co přesně říká.
A možná i právě proto co píšete Protože za chvíli si někdo vzpomene…, protože dokud si nevzpomene mám definované stavy (Jméno, Nevyplněno), jakmile si vzpomene definujeme 3. stav (Jméno; Prázdné jméno znamená, že medvěd dorazil; nevyplněno) a musím fčul přizpůsobit aplikační vrstvu. Pokud rozšiřuji mám jednoznačnou úlohu, obraceně už ne.
PS: PhpMyAdmin neumožňoval definici sloupce NULL a default '', už to nějaký pátek umí (od verzí 3.x), bo sem to reklamoval, z toho je patrné, že sám tuto funkcionalitu používám (prázdná řetězec a NULL ≡ dvě informace), nicméně… :)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

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.