Warunek zalezny od wartosci w pierwszym wierszy - psql

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
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

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

0

GROUP BY country_name LIMIT 1

0
SELECT *
FROM addresses a
WHERE a.country LIKE (SELECT country FROM addresses LIMIT 1)

Coś w ten deseń?

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

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.

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

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?

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.

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.

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.

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1