Warunek zalezny od wartosci w pierwszym wierszy - psql

Warunek zalezny od wartosci w pierwszym wierszy - psql
poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
0

Witam,

Mam zapytanie, ktore pobiera mi adresy, ktore sa posortowane po kraju. Chce, zeby SELECT zwrocil wylacznie kraj, ktory wyskoczy w pierwszym wierszu.

Na razie SELECT wyrzuca mi np taki wynik:

address country_name
Lipowa 10 Polska
Lipowa 10 Polska
Lipowa 10 Polska
Address 1 Rumunia
Address 2 Zimbabwe
Address 3 Zimbabwe

Ja chce go zawezic wylacznie do jednego kraju. Kraju, ktory wystepuje w pierwszym wierszu. Moze to byc Polska, albo jakikolwiek inny kraj. Lista moze byc dosc dluga.

address country_name
Lipowa 10 Polska
Lipowa 10 Polska
Lipowa 10 Polska
poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
0

Chyba uzyje WITH. W pierwszym zapytaniu wyluskam kraju i w glownym pobiore adresy zaleznie od kraju jaki zostanie zwrocony z WITH. Brak mi pomyslowl

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
0

znaczy ja nie widzę innej opcji - pobrać "pierwszy" kraj a potem przefiltrować wszystkie po tym kraju. Czy zrobisz to przez CTE, podzapytanie czy dwa oddzielne zapytania to już tylko szczegół implementacyjny

TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 700m n.p.m.
  • Postów: 681
0

GROUP BY country_name LIMIT 1

.andy
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1524
0
Kopiuj
SELECT *
FROM addresses a
WHERE a.country LIKE (SELECT country FROM addresses LIMIT 1)

Coś w ten deseń?

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
0
TomRZ napisał(a):

GROUP BY country_name LIMIT 1

pewny jesteś - przecież to Ci zwróci TYLKO JEDEN wiersz a nie WSZYSTKIE te, które kraj mają taki jak w pierwszym wierszu

TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 700m n.p.m.
  • Postów: 681
0
abrakadaber napisał(a):
TomRZ napisał(a):

GROUP BY country_name LIMIT 1

pewny jesteś - przecież to Ci zwróci TYLKO JEDEN wiersz a nie WSZYSTKIE te, które kraj mają taki jak w pierwszym wierszu

Już Ci odpisałem w komentarzu ale jeżeli tak chcesz no to jeszcze raz:

Przecież napisał, że chce tylko pierwszy wiersz. A jeżeli chce pierwszy wiersz z każdego kraju to wystarczy samo GROUB BY. To SQLowe przedszkole.

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
0
TomRZ napisał(a):

Przecież napisał, że chce tylko pierwszy wiersz. A jeżeli chce pierwszy wiersz z każdego kraju to wystarczy samo GROUB BY. To SQLowe przedszkole.

no właśnie, że w pierwszym poście jest zgoła co innego napisane i zarówno ja jak i @.andy zrozumieliśmy @poniatowski tak samo więc

.andy
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1524
0

Chce, zeby SELECT zwrocil wylacznie kraj, ktory wyskoczy w pierwszym wierszu.

Czyli, robi selecta, bierze z pierwszego rekordu kraj i robi drugiego selekta który zwróci tylko te wpisy z tym krajem. Ja to tak widzę. @poniatowski tak?

TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 700m n.p.m.
  • Postów: 681
0

xD

Sorry, ale cz Wy rozumiecie w ogóle co robi klauzula GROUP BY? Bo mam wrażenie, że chyba nie? Jeżeli chodzi mu o sam kraj to nawet nie trzeba robić WITH, a pisał, że chodzi mu o sam kraj.

Jeżeli chce więcej danych (więcej kolumn, niż tylko ta na kraj) to połączenie WITH i GROUP BY - co można zrobić w JEDNYM zapytaniu SQL.

.andy
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1524
0

@TomRZ:

Jeżeli chodzi mu o sam kraj to nawet nie trzeba robić WITH, a pisał, że chodzi mu o sam kraj.

wydaje mi się że nie rozumiesz tego co chce autor. Zobacz na pierwszy post i zamieszczone zrzuty ekranu.

YA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2385
0

@poniatowski: Co dla Ciebie znaczy "pierwszy" wiersz? W SQLu jak chcesz zadać porządek na zbiorze, to robisz ORDER BY.

Jeśli robisz order by, to możesz też przypisać numer grupy i filtrować po numerze grupy.

Kopiuj
select 
  x.address,
  x.country_name
from (select dense_rank() over (order by country_name) rnk, a.* from addresses a) x 
where x.rnk=1;

Jak nie przywiązujesz uwagi do kolejności, o tak jak pisał @.andy

.andy
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1524
0

@yarel: myślę, że to było jakieś zadanie na studiach w stylu, dla zadanego zapytania pobierz z pierwszego rekordu wartość kraju i przefiltruj wyniki po nim.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.