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 04:44 | Komunita

    Ubuntu 26.10 bude Stonking Stingray (úžasný rejnok).

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

    Webový prohlížeč Dillo (Wikipedie) byl vydán ve verzi 3.3.0. S experimentální podporou FLTK 1.4. S příkazem dilloc pro ovládání prohlížeče z příkazové řádky. Vývoj prohlížeče se přesunul z GitHubu na vlastní doménu dillo-browser.org (Git).

    Ladislav Hagara | Komentářů: 1
    včera 21:55 | Komunita

    Byl publikován přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Vývojáři v přehledu vypíchli vylepšenou instalaci, podporu senzoru okolního světla, úsporu energie, opravy Bluetooth nebo zlepšení audia. Vývoj lze podpořit na Open Collective a GitHub Sponsors.

    Ladislav Hagara | Komentářů: 0
    25.4. 04:00 | Nová verze

    raylib (Wikipedie), tj. multiplatformní open-source knihovna pro vývoj grafických aplikací a her, byla vydána ve verzi 6.0.

    Ladislav Hagara | Komentářů: 0
    24.4. 18:33 | IT novinky

    Nové verze AI modelů. Společnost OpenAI představila GPT‑5.5. Společnost DeepSeek představila DeepSeek V4.

    Ladislav Hagara | Komentářů: 0
    24.4. 15:33 | Zajímavý článek

    Nová čísla časopisů od nakladatelství Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 164 (pdf) a Hello World 29 (pdf).

    Ladislav Hagara | Komentářů: 0
    24.4. 04:44 | Komunita

    Bylo oznámeno, že webový prohlížeč Opera GX zaměřený na hráče počítačových her je už také na Flathubu and Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    23.4. 23:11 | IT novinky

    Akcionáři americké mediální společnosti Warner Bros. Discovery dnes schválili převzetí firmy konkurentem Paramount Skydance za zhruba 110 miliard dolarů (téměř 2,3 bilionu Kč). Firmy se na spojení dohodly v únoru. O část společnosti Warner Bros. Discovery dříve usilovala rovněž streamovací platforma Netflix, se svou nabídkou však neuspěla. Transakci ještě budou schvalovat regulační orgány, a to nejen ve Spojených státech, ale také

    … více »
    Ladislav Hagara | Komentářů: 0
    23.4. 22:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 26.04 LTS Resolute Raccoon. Přehled novinek v poznámkách k vydání. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 11. vydání s dlouhodobou podporou (LTS).

    Ladislav Hagara | Komentářů: 2
    23.4. 11:55 | Nová verze

    V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Gitea (Wikipedie) byla vydána v nové verzi 1.26.0. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (8%)
     (2%)
     (13%)
     (31%)
     (4%)
     (7%)
     (2%)
     (15%)
     (25%)
    Celkem 1427 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: sql problem

    b42 avatar 11.12.2006 21:40 b42 | skóre: 12 | Ostrava/Brno
    sql problem
    Přečteno: 191×
    zdravim,

    mam 3 tabulky, obsahujici nasledujici kolonky:
    users - user_id
    payment - user_id, payment_id, amount
    demand - user_id, demand_id, amount
    
    chtel bych vypsat u uzivatele soucet jeho pohledavek a jeho plateb, muj dotaz vypada takto a vypisuje hodnoty, podle kterych to vypada ze tam nekde vznika nejaky kartezsky soucin:
    SELECT u.user_id, SUM(dm.amount), SUM(p.amount)
    FROM users u
    LEFT JOIN payment p ON p.user_id = u.user_id
    LEFT JOIN demand dm ON dm.user_id = u.user_id
    WHERE dm.cancel_date IS NULL AND p.cancel_date IS NULL AND u.user_id = 1205
    GROUP BY u.user_id
    
    +---------+----------------+---------------+
    | user_id | SUM(dm.amount) | SUM(p.amount) |
    +---------+----------------+---------------+
    |    1205 |        2000.00 |       1084.00 | 
    +---------+----------------+---------------+
    
    (spravne to ma byt 1000 a 542 - v demand jsou pro tohoto uzivatele castky 500 a 500, v payment 500 a 42)

    kdyz vyhazu tu agregaci vypada to asi takhle:
    SELECT u.user_id, dm.amount, p.amount, dm.demand_id, p.payment_id
    FROM users u
    LEFT JOIN payment p ON p.user_id = u.user_id
    LEFT JOIN demand dm ON dm.user_id = u.user_id
    WHERE dm.cancel_date IS NULL AND p.cancel_date IS NULL AND u.user_id = 1205
    
    +---------+--------+--------+-----------+------------+
    | user_id | amount | amount | demand_id | payment_id |
    +---------+--------+--------+-----------+------------+
    |    1205 | 500.00 |  42.00 |         4 |          7 | 
    |    1205 | 500.00 |  42.00 |        11 |          7 | 
    |    1205 | 500.00 | 500.00 |         4 |         11 | 
    |    1205 | 500.00 | 500.00 |        11 |         11 | 
    +---------+--------+--------+-----------+------------+
    
    otazka zni: jak by mel vypadat dotaz, ktery vypise to co chci? (pro vice uzivatelu, ta podminka user_id = 1205 je tam jen pro demonstraci)

    Odpovědi

    11.12.2006 22:44 jekub | skóre: 9 | blog: noblog
    Rozbalit Rozbalit vše Re: sql problem
    otazka zni: jak by mel vypadat dotaz, ktery vypise to co chci? (pro vice uzivatelu, ta podminka user_id = 1205 je tam jen pro demonstraci)

    Já bych si raděj položil otázku, proč dostávám výsledek, jaký dostávám. Třeba proto, že: spojením users a demand dostanu
    USER_ID                AMOUNT                 
    ---------------------- ---------------------- 
    1205                   500                    
    1205                   500                    
    
    spojením výsledné tabulky s payment relací jen přes user_id dostanu kartézský součín (2 x 2 = 4 řádky)
    USER_ID                AMOUNT                 AMOUNT                 
    ---------------------- ---------------------- ---------------------- 
    1205                   500                    42                     
    1205                   500                    500                    
    1205                   500                    42                     
    1205                   500                    500                    
    

    no a agregace pak dá výsledky 2000 a 1084. Těžko očekávat očekávané výsledky spojení tabulek (payment a demand), které nejsou v relaci.

    Možné řešení
    select user_id,sum(amount1),sum(amount2) from(
    SELECT u.user_id, dm.amount amount1, 0 amount2
    FROM users u
    LEFT JOIN demand dm ON dm.user_id = u.user_id
    union
    SELECT u.user_id, 0, p.amount
    FROM users u
    LEFT JOIN payment p ON p.user_id = u.user_id
    )
    GROUP BY user_id
    
    b42 avatar 11.12.2006 22:57 b42 | skóre: 12 | Ostrava/Brno
    Rozbalit Rozbalit vše Re: sql problem
    Diky za odpoved.

    Proc dostavam vysledek jaky dostavam jsem celkem tusil, nicmene nevedel jsem co s tim. Vypadalo to jako trivialni ucebnicovy priklad, takze jsem myslel ze to pujde vyresit nejak trivialne ... jakozto uzivatel mysql se subselecty neumim pracovat:) (no dobre, neumim prakticky nic a mysql za to nemuze)

    Jinak asi by tam melo byt UNION ALL (v mysql, nevim jestli i jinde) pro pripad, ze se vyskytnou dve stejne castky.
    11.12.2006 23:07 jekub | skóre: 9 | blog: noblog
    Rozbalit Rozbalit vše Re: sql problem
    Union all, přesně tak. Ještě jsem kvůli tomu zapínal počítač, abych to napravil :-)

    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.