SQL max BIP jedes Land herausfiltern

phpneuling_

Grünschnabel
ich habe folgendes Problem,

Ich versuche den maximalen BIP der einzelenen Westafrikanischen Länder herauszufiltern.

ich weiss nicht , wo der Haken liegt.
Der zeigt mir die Westafrikanischen Länger an, mit allen BIPs
würde es jedoch gerne beschränken auf das größte des jeweiligen landes
Ich nutze die Bsp Datenbank von MariaDB (nation)

select
country_stats.gdp, countries.name
from
country_stats
inner join countries
countries on region_id=12
where

(population, gdp) > (
select
avg(population),
avg(gdp)
from country_stats
where year = 2018)
order by name;

vielen Dank und Grüße
 

Zvoni

Erfahrenes Mitglied
Hab kein Wort verstanden.
1) der Inner Join kann nicht funktionieren --> Fehlende Verknüpfung
2) Was'n das für ne Notation im WHERE? Soll das den IN-Operator darstellen?
3) "Ich versuche den maximalen BIP" --> hab dir nen Hinweis versteckt......
4) WAS HAT DAS MIT PHP zu tun?
5) Lern die Grundlagen zu SQL.

EDIT: Zu 2) Oder soll das ein Filter sein "Population UND gdp grösser als Durchschnitt(population) UND Durchschnitt(gdp)"?
 
Zuletzt bearbeitet:

phpneuling_

Grünschnabel
Danke dir für deine Belehrung.
du hast natürlich vollkommen recht.

Wenn ich nun allerdings den MAX BIP heraussuche, dann sucht er mir das Land mit dem größten Bip raus.
ich würde jedoch gerne den Max Bip eines jeden einzelnen Landes haben wollen.


select
max(gdp), country_stats.gdp, countries.name
from
country_stats
inner join countries
countries on region_id=12

order by name;


bei dieser variante, zeigt er mir nur wie gesagt, den größten wert des Landes in der Tabelle.

kann es sein, dass ich die Länder erst in einzelne arrea packen und dann auslesen muss?

(ich habe leider kein Unterforum für SQL gesehen, deswegen habe ich es hier reingeschrieben)

Die Where Klausel war für mich zum begrenzen da, da er mir sonst aber tausende Ergebnisse liefert.

Danke dir und Gruß
 

phpneuling_

Grünschnabel
das stimmt natürlich. habs auch gerade gesehen.

anbei die Struktur der Datenbank

vielen Dank und Grüße
 

Anhänge

  • 1.png
    1.png
    141,6 KB · Aufrufe: 4
  • 2.png
    2.png
    181,9 KB · Aufrufe: 3
  • 3.png
    3.png
    14,8 KB · Aufrufe: 3
  • 4.png
    4.png
    96,2 KB · Aufrufe: 4

Zvoni

Erfahrenes Mitglied
So, damit kann ich ja schon mal was anfangen:
Alles ungetestet:
Damit verheiratest du erstmal das Land mit seiner Statistik
SQL:
SELECT
c.Name, s.population, s.gdp
FROM countries c
INNER JOIN country_stats s
ON s.country_id=c.country_id
WHERE c.region_id=12

Und jetzt holen wir uns den höchsten GDP-Wert eines jeden Landes
SQL:
SELECT
c.Name, s.gdp, s.year, s.population
FROM countries c
INNER JOIN
(SELECT 
     country_id, 
     year, 
     population, 
     gdp, 
     ROW_NUMBER() OVER(PARTITION BY country_id ORDER BY country_id ASC, gdp DESC) AS RN 
FROM country_stats) s
ON s.country_id=c.country_id
WHERE c.region_id=12 AND s.RN=1
 
Zuletzt bearbeitet: