Article View: pl.comp.bazy-danych
Article #195115Re: [mysql] Łączenie danych z wielu tabel
From: geos
Date: Mon, 17 Oct 2016 20:38
Date: Mon, 17 Oct 2016 20:38
54 lines
3500 bytes
3500 bytes
On 17.10.2016 20:02, kamil.sobczyk@gmail.com wrote: > Szukam pomocy w stworzeniu zapytania SQL (mysql) zwracającego dla grupy wiekowej 11 lat (pole w tabeli **Klub**) w roku 2012 i kwartale 3 coś na podobieństwo: > > ||=id_zawodnik||id_szkolka||grupa_wiekowa||rok||kwartal||punkty_b5||punty_b10||punkty_30||SUMA > ||1||2||11||2012||3||null||20||5||25 > ||2||2||11||2012||3||null||null||5||5 > ||3||2||11||2012||3||15||20||5||40 > ||4||2||11||2012||3||null||null||null||0 > > oraz zapytania zwracającego wszelkie dostępne daty (rok, kwartal) jakie występują w tabelach **BIEG5**, **BIEG10**, **BIEG30** ? > > Będę wdzięczny za wszelką pomoc. tak na pierwszy rzut oka to trochę nieintuicyjnie sobie zaprojektowałeś te biegi. czemu trzy osobne tabele a nie jedna z kolumną np. dystans o wartościach 5, 10, 30 (czy jakie tam kiedyś w przyszłości dodatkowe będą)? albo jedna partycjonowana po tej kolumnie jeśli zależy Ci na osobnych segmentach danych. wracając do pytania - spróbuj napisać sobie taki widok w mysql: select b.dst, b.idz, b.idsz, k.gw, b.rok, b.kw , max(case when dystans = 5 then punkty end) p5 , max(case when dystans = 10 then punkty end) p10 , max(case when dystans = 30 then punkty end) p30 from ( select idz, idsz, rok, kw, punkty_5 pkt, 5 dst from bieg5 union all select idz, idsz, rok, kw, punkty_10 pkt, 10 dst from bieg10 union all select idz, idsz, rok, kw, punkty_30 pkt, 30 dst from bieg30 ) b left join klub k on b.idk = k.idk left join zawodnik z on b.idz = z.idz group by b.dst, b.idz, b.idsz, k.gw, b.rok, b.kw ; i dalej z tego widoku odpytuj o rok, kwartał czy co tam chcesz. a jak nie chcesz widoku to dodaj pożądane warunki do tego zapytania powyżej. sumę też możesz obliczać albo w zapytaniu do widoku albo w definicji widoku. wygląda na to, że start zawodnika ze szkółki w biegu X jest raz na kwartał. nie wnikam dalej w to, ale jeśli jest inaczej to ten max oczywiście nie zadziała, potrzebna byłaby dodatkowa kolumna np. numer_startu. ewentualnie jeśli mysql obsługuje pivot to możesz skorzystać z pivota. jeśli chodzi o dostępne kombinacje rok/kwartał to wykorzystaj fragment "b" powyżej, zamień union all na union i usuń kolumny poza rok i kw. łubu dubu, łubu dubu, niech nam żyje prezes klubu! pozdrawiam geos
Technical Details
Message-ID:
<580536ce$0$5152$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin1!goblin.stu.neva.ru!peer04.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<f97272db-262f-4f16-912e-f32dacc7518b@googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin1!goblin.stu.neva.ru!peer04.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail From: geos <geos@SPAMPRECZ.autograf.pl> Subject: Re: [mysql] Łączenie danych z wielu tabel Newsgroups: pl.comp.bazy-danych References: <f97272db-262f-4f16-912e-f32dacc7518b@googlegroups.com> X-Mozilla-News-Host: news://ssl.astraweb.com Date: Mon, 17 Oct 2016 22:38:38 +0200 MIME-Version: 1.0 In-Reply-To: <f97272db-262f-4f16-912e-f32dacc7518b@googlegroups.com> Lines: 55 Message-ID: <580536ce$0$5152$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 093105185217.warszawa.vectranet.pl X-Trace: 1476736718 unt-rea-a-01.news.neostrada.pl 5152 93.105.185.217:55375 X-Complaints-To: abuse@news.neostrada.pl X-Received-Bytes: 3232 X-Received-Body-CRC: 2783114597 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit