Thread View: pl.comp.bazy-danych
11 messages
11 total messages
Started by Leszek Zur
Fri, 05 Jun 2015 14:33
2 limity
Author: Leszek Zur
Date: Fri, 05 Jun 2015 14:33
Date: Fri, 05 Jun 2015 14:33
27 lines
2074 bytes
2074 bytes
Baza MySQL. Mam tabelę z kolumnami: państwo, miasto, mieszkancy. W tabeli mieszkańcy podana jest ilość mieszkańców danego miasta. Chce napisać zapytanie, które zwróci mi tą tabelę ale z 2 limitami. Chcę, żeby zwróciło mi maksimum x miast ale żeby z każdego państwa było maksimum y miast o największej liczbie mieszkańców. Przykładowo dla x=5 i y=2 i następującej tabeli: Francja Paryż 2000 Francja Lille 500 Polska Warszawa 1000 Polska Wrocław 700 Polska Opole 500 Niemcy Berlin 2000 Niemcy Dortmund 1000 Włochy Rzym 1500 chcę żeby odrzuciło mi Opole (bo przekroczony y dla Polski), oraz Dortmund i Rzym (bo przekroczony x). Do tej pory robiłem zapytanie o listę wszystkich państw, dla każdego państwa pobierałem listę największych miast ograniczoną przez y, zliczałem ile już mam miast i jak osiągnąłem x to kończyłem. Może da się to zapisać jako jedno zapytanie, które będzie pewnie szybsze od serii wielu mniejszych ? Leszek
Re: 2 limity
Author: pawel.socha
Date: Mon, 08 Jun 2015 14:49
Date: Mon, 08 Jun 2015 14:49
37 lines
2521 bytes
2521 bytes
W dniu piątek, 5 czerwca 2015 16:33:40 UTC+2 użytkownik Leszek Zur napisał: > Baza MySQL. > Mam tabelę z kolumnami: państwo, miasto, mieszkancy. > W tabeli mieszkańcy podana jest ilość mieszkańców danego miasta. > Chce napisać zapytanie, które zwróci mi tą tabelę ale z 2 limitami. > Chcę, żeby zwróciło mi maksimum x miast ale żeby z każdego państwa było > maksimum y miast o największej liczbie mieszkańców. > > Przykładowo dla x=5 i y=2 i następującej tabeli: > Francja Paryż 2000 > Francja Lille 500 > Polska Warszawa 1000 > Polska Wrocław 700 > Polska Opole 500 > Niemcy Berlin 2000 > Niemcy Dortmund 1000 > Włochy Rzym 1500 > > chcę żeby odrzuciło mi Opole (bo przekroczony y dla Polski), oraz > Dortmund i Rzym (bo przekroczony x). > Do tej pory robiłem zapytanie o listę wszystkich państw, dla każdego > państwa pobierałem listę największych miast ograniczoną przez y, > zliczałem ile już mam miast i jak osiągnąłem x to kończyłem. > > Może da się to zapisać jako jedno zapytanie, które będzie pewnie szybsze > od serii wielu mniejszych ? > > Leszek Być może twoim rozwiązaniem jest "order by" wielość_miast oraz "having" wielkosc_miast >= y Tak z glowy: SELECT * from Tabela order by wielość_miast desc having >= y LIMIT x -- Pawel Socha
Re: 2 limity
Author: merlin
Date: Mon, 08 Jun 2015 14:59
Date: Mon, 08 Jun 2015 14:59
46 lines
2766 bytes
2766 bytes
On Friday, 5 June 2015 16:33:40 UTC+2, Leszek Zur wrote: > Baza MySQL. > Mam tabelę z kolumnami: państwo, miasto, mieszkancy. > W tabeli mieszkańcy podana jest ilość mieszkańców danego miasta. > Chce napisać zapytanie, które zwróci mi tą tabelę ale z 2 limitami. > Chcę, żeby zwróciło mi maksimum x miast ale żeby z każdego państwa było > maksimum y miast o największej liczbie mieszkańców. > > Przykładowo dla x=5 i y=2 i następującej tabeli: > Francja Paryż 2000 > Francja Lille 500 > Polska Warszawa 1000 > Polska Wrocław 700 > Polska Opole 500 > Niemcy Berlin 2000 > Niemcy Dortmund 1000 > Włochy Rzym 1500 > > chcę żeby odrzuciło mi Opole (bo przekroczony y dla Polski), oraz > Dortmund i Rzym (bo przekroczony x). > Do tej pory robiłem zapytanie o listę wszystkich państw, dla każdego > państwa pobierałem listę największych miast ograniczoną przez y, > zliczałem ile już mam miast i jak osiągnąłem x to kończyłem. > > Może da się to zapisać jako jedno zapytanie, które będzie pewnie szybsze > od serii wielu mniejszych ? > > Leszek Ciepło? mysql> select * from miasta having populacja > 500 order by 3 desc ; +---------+----------+-----------+ | panstwo | miasto | populacja | +---------+----------+-----------+ | Francja | Paryz | 2000 | | Niemcy | Berlin | 2000 | | Wlochy | Rzym | 1500 | | Polska | Warszawa | 1000 | | Niemcy | Dortmund | 1000 | | Polska | Wroclaw | 700 | +---------+----------+-----------+ 6 rows in set (0,00 sec) Pawel Socha
Re: 2 limity
Author: PawelS cbrbob(at)wbcd(dot)pl
Date: Sun, 14 Jun 2015 07:29
Date: Sun, 14 Jun 2015 07:29
48 lines
2788 bytes
2788 bytes
merlin pisze: > On Friday, 5 June 2015 16:33:40 UTC+2, Leszek Zur wrote: >> Baza MySQL. >> Mam tabelę z kolumnami: państwo, miasto, mieszkancy. >> W tabeli mieszkańcy podana jest ilość mieszkańców danego miasta. >> Chce napisać zapytanie, które zwróci mi tą tabelę ale z 2 limitami. >> Chcę, żeby zwróciło mi maksimum x miast ale żeby z każdego państwa było >> maksimum y miast o największej liczbie mieszkańców. >> >> Przykładowo dla x=5 i y=2 i następującej tabeli: >> Francja Paryż 2000 >> Francja Lille 500 >> Polska Warszawa 1000 >> Polska Wrocław 700 >> Polska Opole 500 >> Niemcy Berlin 2000 >> Niemcy Dortmund 1000 >> Włochy Rzym 1500 >> >> chcę żeby odrzuciło mi Opole (bo przekroczony y dla Polski), oraz >> Dortmund i Rzym (bo przekroczony x). >> Do tej pory robiłem zapytanie o listę wszystkich państw, dla każdego >> państwa pobierałem listę największych miast ograniczoną przez y, >> zliczałem ile już mam miast i jak osiągnąłem x to kończyłem. >> >> Może da się to zapisać jako jedno zapytanie, które będzie pewnie szybsze >> od serii wielu mniejszych ? >> >> Leszek > > Ciepło? Blisko ? > mysql> select * from miasta having populacja > 500 order by 3 desc ; > +---------+----------+-----------+ > | panstwo | miasto | populacja | > +---------+----------+-----------+ > | Francja | Paryz | 2000 | > | Niemcy | Berlin | 2000 | > | Wlochy | Rzym | 1500 | > | Polska | Warszawa | 1000 | > | Niemcy | Dortmund | 1000 | > | Polska | Wroclaw | 700 | > +---------+----------+-----------+ > 6 rows in set (0,00 sec) Moim skromnym zdaniem zdaniem podałeś rozwiązane znając dane wejściowe. Teraz podziel sobie zawartość kolumny "populacja" przez 10 i sprawdź czy zapytanie w dalszym ciągu zwraca oczekiwany wynik ?
Re: 2 limity
Author: Leszek Zur
Date: Sun, 14 Jun 2015 19:34
Date: Sun, 14 Jun 2015 19:34
7 lines
1248 bytes
1248 bytes
Odpowiadam sam sobie i dla potomnych. Poprawne rozwiązanie jest na http://sqlfiddle.com/#!9/af2799/1 Nie ja jestem jego autorem. Autora zobaczyć można na https://forum.4programmers.net/Bazy_danych/253381-2_limity_-_w_zapytaniu_i_podzapytaniu Leszek
Re: 2 limity
Author: Adam
Date: Sun, 14 Jun 2015 19:45
Date: Sun, 14 Jun 2015 19:45
13 lines
1089 bytes
1089 bytes
W dniu 2015-06-14 o 21:34, Leszek Zur pisze: > Odpowiadam sam sobie i dla potomnych. > Poprawne rozwiązanie jest na http://sqlfiddle.com/#!9/af2799/1 > (...) A SELECT TOP dla MS-SQL nie jest jeszcze prostszy? -- Pozdrawiam. Adam
Re: 2 limity
Author: Leszek Zur
Date: Mon, 15 Jun 2015 12:06
Date: Mon, 15 Jun 2015 12:06
17 lines
1809 bytes
1809 bytes
W dniu 2015-06-14 o 21:45, Adam pisze: > A SELECT TOP dla MS-SQL nie jest jeszcze prostszy? Po pierwsze ja mam MySQL a nie MS-SQL co wyraźnie zaznaczyłem w pierwszym poście Po drugie z tego co wyczytałem TOP jest synonimem LIMIT więc nie ma żadnego wpływu na wydajność Po trzecie problemem (przynajmniej dla mnie) było takie sformułowanie zapytania aby uwzględnić limit ilości miast w danym państwie a nie limit całkowity. Ale jeśli masz propozycję lepszego (szybszego) zapytania to chętnie je zobaczę. Leszek
Re: 2 limity
Author: Marek Horodyski
Date: Mon, 14 Dec 2015 02:35
Date: Mon, 14 Dec 2015 02:35
23 lines
2243 bytes
2243 bytes
W dniu poniedziałek, 15 czerwca 2015 14:06:17 UTC+2 użytkownik Leszek Zur napisał: > W dniu 2015-06-14 o 21:45, Adam pisze: > > A SELECT TOP dla MS-SQL nie jest jeszcze prostszy? > > Po pierwsze ja mam MySQL a nie MS-SQL co wyraźnie zaznaczyłem w > pierwszym poście > > Po drugie z tego co wyczytałem TOP jest synonimem LIMIT więc nie ma > żadnego wpływu na wydajność > > Po trzecie problemem (przynajmniej dla mnie) było takie sformułowanie > zapytania aby uwzględnić limit ilości miast w danym państwie a nie limit > całkowity. > > Ale jeśli masz propozycję lepszego (szybszego) zapytania to chętnie je > zobaczę. > > Leszek Czy MySQL ma coś takiego jak funkcje statystyczne Oracla? Trudno mi tu je opisać, bo to taka specyfika, ale to ma ogromne możliwości. Tam można fragmentować i sortować te fragmenty, a następnie osadzić to jako podzapytanie z którego wybiera się limitowane zakresy. Pozdr., Marek Horodyski
Re: 2 limity
Author: M.M.
Date: Mon, 14 Dec 2015 12:01
Date: Mon, 14 Dec 2015 12:01
5 lines
1689 bytes
1689 bytes
On Sunday, June 14, 2015 at 9:34:43 PM UTC+2, Leszek Zur wrote: > Odpowiadam sam sobie i dla potomnych. > Poprawne rozwiązanie jest na http://sqlfiddle.com/#!9/af2799/1 Nie widać tam zapytania. Pozdrawiam
Re: 2 limity
Author: geos
Date: Mon, 14 Dec 2015 12:48
Date: Mon, 14 Dec 2015 12:48
9 lines
1250 bytes
1250 bytes
On 14.12.2015 13:01, M.M. wrote: > On Sunday, June 14, 2015 at 9:34:43 PM UTC+2, Leszek Zur wrote: >> Odpowiadam sam sobie i dla potomnych. >> Poprawne rozwiązanie jest na http://sqlfiddle.com/#!9/af2799/1 > Nie widać tam zapytania. > Pozdrawiam > widać, widać.
Re: 2 limity
Author: M.M.
Date: Mon, 14 Dec 2015 13:17
Date: Mon, 14 Dec 2015 13:17
13 lines
1733 bytes
1733 bytes
On Monday, December 14, 2015 at 1:48:10 PM UTC+1, geos wrote: > On 14.12.2015 13:01, M.M. wrote: > > On Sunday, June 14, 2015 at 9:34:43 PM UTC+2, Leszek Zur wrote: > >> Odpowiadam sam sobie i dla potomnych. > >> Poprawne rozwiązanie jest na http://sqlfiddle.com/#!9/af2799/1 > > Nie widać tam zapytania. > > Pozdrawiam > > > > widać, widać. Nie wiedziałem że trzeba napisać dwa razy, ale spoko. nie widać, nie widać ;-)
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads