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 15:00 | Zajímavý software

    Euro-Office (Wikipedie) je evropský fork open source kancelářského balíku OnlyOffice. Za forkem stojí koalice firem IONOS, Nextcloud, Eurostack, XWiki, OpenProject, Soverin, Abilian a BTactic. Cílem je zajistit digitální suverenitu Evropy a snížit závislost na neevropských platformách. Projekt vznikl mimo jiné v reakci na nedávné uzavření cloudové služby OnlyOffice. OnlyOffice obviňuje Euro-Office z porušení licenčních podmínek. Na možné problémy upozorňuje i Collabora Online. Jednostranná změna licence není v pořádku.

    Ladislav Hagara | Komentářů: 4
    dnes 05:11 | Komunita

    Byly zpracovány a na YouTube zveřejněny videozáznamy jednotlivých přednášek z letošního Installfestu.

    Ladislav Hagara | Komentářů: 0
    dnes 00:22 | Komunita

    Během akce Arduino Days 2026 byl publikován Arduino Open Source Report 2025 (pdf) a oznámeno 7 nových produktů kompatibilních s deskou UNO Q (Arduino USB-C Power Supply, USB-C Cable, USB-C Hub, UNO Media Carrier, UNO Breakout Carrier, Bug Hopper, Modulino LED Matrix).

    Ladislav Hagara | Komentářů: 1
    včera 20:22 | IT novinky

    Google v pátek spustil v Česku Vyhledávání Live. Tato novinka umožňuje lidem vést plynulou konverzaci s vyhledávačem v češtině. A to prostřednictvím hlasu, nebo prostřednictvím toho, na co ukážou svým fotoaparátem či kamerou v mobilu. Rozšíření této multimodální funkce je možné díky nasazení Gemini 3.1 Flash Live, nového hlasového a audio modelu, který je od základu vícejazyčný, takže umožňuje lidem po celém světě mluvit na vyhledávač přirozeně a v jazyce, který je jim nejbližší.

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

    Jsongrep je open-source nástroj, který efektivně prohledává JSON dokumenty (editovat je neumí). Kompiluje regulérní jazyk dotazu do podoby deterministického konečného automatu (DFA), díky čemuž prochází strom JSON dokumentu pouze jednou a je v tom tedy rychlejší než jiné nástroje jako jsou například jq, JMESPath nebo jql. Jsongrep je napsaný v programovacím jazyce Rust, zdrojový kód je dostupný na GitHubu.

    NUKE GAZA! 🎆 | Komentářů: 4
    28.3. 05:55 | Komunita

    O víkendu probíhá v Praze na Karlově náměstí 13 konference Installfest 2026. Na programu je celá řada zajímavých přednášek a workshopů. Vstup na konferenci je zcela zdarma, bez nutnosti registrace. Přednášky lze sledovat i online na YouTube.

    Ladislav Hagara | Komentářů: 12
    28.3. 05:22 | Komunita

    Mozilla a společnost Mila oznámily strategické partnerství za účelem rozvoje open source a suverénní AI. Cílem je ukázat, že open source AI může konkurovat uzavřeným systémům. Obě organizace chtějí posílit technologickou suverenitu a snížit závislost na hrstce velkých technologických firem.

    Ladislav Hagara | Komentářů: 4
    28.3. 04:00 | Humor

    Adam Rice předvedl, že pomocí DNS lze distribuovat a spustit kompletní hru DOOM. Rozdělil WAD soubory a binárky do téměř 2000 DNS záznamů v Cloudflare zóně (jeden TXT záznam v DNS může nést okolo 2000 znaků textu). Ty pak stáhl PowerShellem, dekomprimoval a spustil přímo v paměti počítače bez nutnosti zápisu na disk, což prakticky dokazuje, že DNS může sloužit jako distribuované úložiště dat a možný kanál pro načítání kódu. Repozitář projektu je na GitHubu.

    NUKE GAZA! 🎆 | Komentářů: 9
    27.3. 13:00 | Komunita

    Dnes a zítra probíhají Arduino Days 2026. Na programu je řada zajímavých přednášek. Sledovat je lze od 17:00 na YouTube. Zúčastnit se lze i lokálních akcí. Dnes v Poličce v městské knihovně a zítra v Praze na Matfyzu.

    Ladislav Hagara | Komentářů: 9
    27.3. 12:11 | Nová verze

    Byla vydána beta verze Ubuntu 26.04 LTS s kódovým názvem Resolute Raccoon. Přehled novinek v poznámkách k vydání. Dle plánu by Ubuntu 26.04 LTS mělo vyjít 23. dubna 2026.

    Ladislav Hagara | Komentářů: 2
    Které desktopové prostředí na Linuxu používáte?
     (15%)
     (7%)
     (1%)
     (12%)
     (30%)
     (3%)
     (5%)
     (2%)
     (14%)
     (24%)
    Celkem 1187 hlasů
     Komentářů: 27, poslední 17.3. 19:26
    Rozcestník

    Dotaz: SQL dotaz, groupování

    24.7.2017 20:54 Franta
    SQL dotaz, groupování
    Přečteno: 1426×
    Mám sqlite databázi a následující tabulku, nazvěme ji tbl:
    |- id1 -|- id2 -|- min -|- max -|- pos -|-- set ---|
    |   0   |   0   |  10   |  20   |   0   |    0     |
    |   0   |   0   |   5   |  10   |   1   |    0     | Group1
    |--------------------------------------------------|
    |   0   |   0   |  15   |  25   |   0   |    1     | Group 2
    |--------------------------------------------------|
    |   0   |   0   |   5   |  15   |   0   |    2     | Group 3
    |-------|-------|-------|-------|-------|----------|
    |   0   |   1   |   5   |  10   |   0   |    0     |
    |   0   |   1   |   6   |  10   |   1   |    0     | Group4
    |-------|-------|-------|-------|-------|----------|
    |   1   |   0   |   5   |  10   |   0   |    0     |
    |   1   |   0   |   5   |  15   |   1   |    0     | Group5
    |   1   |   0   |  10   |  20   |   2   |    0     |
    
    Každá unikátní kombinace set, id1, id2 by měla představovat jednu skupinu.

    Ze skupiny potřebuji vybrat řádek, který má největší rozdíl min - max, zároveň nejmenší hodnotu pos.

    Nějak jsem napsal poddotaz. Píšu to teď z hlavy a asi to nebude funkční, něco takového:
    SELECT *
    FROM `tbl`
    `A`
    INNER JOIN
    ( SELECT `id1`, `id2`, `set`, MAX(`max` - `min`) as `delta`
      FROM `tbl`
      GROUP BY `id1`, `id2`, `set`
    ) `B`
    ON `A.id1` = `B.id1` AND `A.id2` = `B.id2` AND `A.set` = `B.set` AND (`A.max` - `A.min`) = `B.delta`
    
    Tento dotaz mi správně vrátí záznamy z každé skupiny s nejvyšším rozdílem max, min, tj:
    |- id1 -|- id2 -|- min -|- max -|- pos -|-- set ---|
    |   0   |   0   |  10   |  20   |   0   |    0     |
    |   0   |   0   |   5   |  10   |   1   |    0     | Group1
    |--------------------------------------------------|
    |   0   |   0   |  15   |  25   |   0   |    1     | Group 2
    |--------------------------------------------------|
    |   0   |   0   |   5   |  15   |   0   |    2     | Group 3
    |-------|-------|-------|-------|-------|----------|
    |   0   |   1   |   5   |  10   |   0   |    0     | Group4
    |-------|-------|-------|-------|-------|----------|
    |   1   |   0   |   5   |  15   |   1   |    0     | Group5
    |   1   |   0   |  10   |  20   |   2   |    0     |
    
    Z tohoto výsledku ještě potřebuji dostat řádky s nejnižší hodnotou pos v dané skupině. Tj. chci záznamy:
    |- id1 -|- id2 -|- min -|- max -|- pos -|-- set ---|
    |   0   |   0   |  10   |  20   |   0   |    0     | Group1
    |--------------------------------------------------|
    |   0   |   0   |  15   |  25   |   0   |    1     | Group 2
    |--------------------------------------------------|
    |   0   |   0   |   5   |  15   |   0   |    2     | Group 3
    |-------|-------|-------|-------|-------|----------|
    |   0   |   1   |   5   |  10   |   0   |    0     | Group4
    |-------|-------|-------|-------|-------|----------|
    |   1   |   0   |   5   |  15   |   1   |    0     | Group5
    
    Napadlo mě zduplikovat poddotaz, na jeden udělat poddotaz s agregační funkci MIN(pos) a provést další inner join na původní poddotaz na id1, id2, pos, ale nějak se mi to nezdá, nejde to udělat lépe?

    Odpovědi

    24.7.2017 20:57 Franta
    Rozbalit Rozbalit vše Re: SQL dotaz, groupování
    Tak dlouho jsem to upravoval, až je to špatně. Druhá tabulka po groupování má správně být
    |- id1 -|- id2 -|- min -|- max -|- pos -|-- set ---|
    |   0   |   0   |  10   |  20   |   0   |    0     | Group1
    |--------------------------------------------------|
    |   0   |   0   |  15   |  25   |   0   |    1     | Group 2
    |--------------------------------------------------|
    |   0   |   0   |   5   |  15   |   0   |    2     | Group 3
    |-------|-------|-------|-------|-------|----------|
    |   0   |   1   |   5   |  10   |   0   |    0     | Group4
    |-------|-------|-------|-------|-------|----------|
    |   1   |   0   |   5   |  15   |   1   |    0     | Group5
    |   1   |   0   |  10   |  20   |   2   |    0     |
    
    24.7.2017 22:09 K
    Rozbalit Rozbalit vše Re: SQL dotaz, groupování
    Ono to moc elegantně udělat nejde. Bohužel sqlite neumí window funkce, se kterými je to udělat hračka.

    Aby byl zápis jednodušší, tak si ještě můžes pomocí with - takhle nějak by to asi mohlo jít:
    with grupovane as (
    SELECT A.id1. A.id2, A.set, A.min, A.max, A.set
    FROM `tbl`
    `A`
    INNER JOIN
    ( SELECT `id1`, `id2`, `set`, MAX(`max` - `min`) as `delta`
      FROM `tbl`
      GROUP BY `id1`, `id2`, `set`
    ) `B`
    ON `A.id1` = `B.id1` AND `A.id2` = `B.id2` AND `A.set` = `B.set` AND (`A.max` - `A.min`) = `B.delta`
    (
    select * from grupovane C
    inner join
    (select id1, id2, set, min(pos) as minpos 
    from grupovane group bz id1, id2, set) d on C.id1 = D.id1 and `C.id2` = `D.id2` AND `C.set` = `D.set`
                  and C.pos = D.minpos
    
    takhle ale připojíš původní tabulku 4x. Navíc pokud budou nějaké záznamy, kde bude stejný rozdíl a stejný pos, tak ti to pro skupinu vrátí dva záznamy.

    Možná by to šlo řešit celkem elegantně aplikačně.
    select * from tbl order by id1, id2, set, max - min desc, pos
    
    a pak pro kombinaci id1, id2, set vzít vždy jen první řádek (pamatovat si hodnoty z minulého fetche a pokud se id1, id2 nebo set změní, tak je to řádek, co mě zajímá.

    25.7.2017 09:18 kaaja | skóre: 24 | blog: Sem tam něco | Podbořany, Praha
    Rozbalit Rozbalit vše Re: SQL dotaz, groupování
    Napadá mě takový workaround přístup. Potřebuješ vlastně najít řádek, pro který neexistuje žádný se stejnou kombinací id1, id2 a set, který má větší rozdíl v min a max, ale menší pos
    select * from tbl a 
    where not exists (
      select 0 from tbl b
       where a.id1 = b.id1 and a.id2 = b.id2 and a.set = b.set 
        and a.max - a.min < b.max - b.min and a.set > b.set
        and a.max <> b.max and a.min <> b.min
    )
    
    ale počítá to s tím, že neexistují úplně duplicitní řádky - ty to nevyselectí.
    Josef Kufner avatar 25.7.2017 11:41 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: SQL dotaz, groupování
    Můžeš to zkusit přepsat pomocí joinu (bez subselectu). Můžeš zkusit otočit ten join, který tam máš. Možná by to vyšlo trochu elegantněji. Ale v zásadě ten select se subselectem máš správně a o moc lépe to nejde.

    Pokud chceš ještě přidat podmínku na co nejmenší pos, tedy aby při stejném MAX(max-min) se vybralo menší pos, tak zkus rozdíl max-min a pos sloučit do jedné hodnoty a tím říct přesné pořadí – něco jako MAX((max - min) + (1 - pos/(SELECT MAX(pos) FROM tbl))) (předpokládám jen celočíselné sloupce). Pro lepší výkon by se mohlo hodit tuhle hodnotu předpočítávat do pomocného sloupečku a dát nad to index.
    Hello world ! Segmentation fault (core dumped)

    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.