Commit 5a5d83a4 authored by Achraf Ayadi's avatar Achraf Ayadi

Upload New File

parent 544560ca
--1. Selektieren Sie das Kreuzprodukt von countries und regions mit den Geometrien in einen View countries_x_regions. (siehe 3.4.5)
create view countries_x_regions as
select regions.region_id, regions.region_headquarter_city, regions."myPoint",countries.geom, countries."name", ST_distance(regions."myPoint",countries.geom) as dist
from regions cross join countries;
2. Erstellen Sie eine Spalte zum Speichern der Distanz region (Headquarter) -> Country mit der zugehörigen PostGIS-Funktion.
create view minimal_distances as
select cr.name, region_headquarter_city, dist, region_id from countries_x_regions as cr inner join(select name, min(dist) as mindist
from countries_x_regions group by name) as md on cr.dist=md.mindist and cr.name=md.name;
3. Ergänzen Sie die countries Tabelle um ein Attribut zum Speichern eines Femdschlüssel für die Beziehung zu regions.
alter table countries drop column regions_id;
alter table countries add column regions_id int;
4. Weisen Sie jedem countries-Datensatz die region_id über den Ländernamen zu.
update countries set regions_id = minimal_distances.region_id from minimal_distances where countries."name"= minimal_distances."name";
5. Erzeugen Sie den Fremdschlüssel bzw. die Beziehung zwischen countries und regions.
ALTER TABLE countries ADD FOREIGN KEY (regions_id) REFERENCES regions (region_id);
6. Korrigieren Sie ggf. ungültige Geometrien mit einem Update der countries-Tabelle mit ST_makevalid und ST_isValid. ?????
select *,ST_IsValid (countries.geom) from countries where ST_IsValid (countries.geom)=false;
update ST_makevalid countries; ??????
7. Erzeugen Sie die Vertriebsregionen mit Vereinigungen der beteiligten countries.
Fügen Sie dazu zunächst ein neues Geometrieattribut mit dem Geometrie-Typ MULTIPOLYGON zur regions Tabelle hinzu.
SELECT AddGeometryColumn( 'public', 'regions','Gesamteregion', 4326, 'MULTIPOLYGON', 2);
SELECT ST_Union(geom) FROM countries WHERE regions_id=1;
SELECT ST_Union(geom) FROM countries WHERE regions_id=2;
SELECT ST_Union(geom) FROM countries WHERE regions_id=3;
SELECT ST_Union(geom) FROM countries WHERE regions_id=4;
UPDATE regions SET "Gesamteregion" =(SELECT ST_Union(geom) FROM countries WHERE regions_id=1) WHERE region_id =1;
UPDATE regions SET "Gesamteregion" =(SELECT ST_Union(geom) FROM countries WHERE regions_id=2) WHERE region_id =2;
UPDATE regions SET "Gesamteregion" =(SELECT ST_Union(geom) FROM countries WHERE regions_id=3) WHERE region_id =3;
UPDATE regions SET "Gesamteregion" =(SELECT ST_Union(geom) FROM countries WHERE regions_id=4) WHERE region_id =4;
1. Fügen Sie je ein Feld revenue vom Datentyp real zu den Tabellen countries und regions hinzu.
alter table countries add column revenue real;
alter table regions add column revenue real;
2. Füllen Sie das neue Feld der Tabelle countries aus dem View revenue_per_country aus Aufgabe 3.4 über den Ländernamen.
UPDATE countries SET revenue= (select sum from public.revenue_per_country
WHERE countries.name = revenue_per_country.ship_country);
3. Erzeugen Sie einen View revenue_per_region für die Umsätze der regions,
basierend auf der Summe der jeweiligen countries-Umsätze einer Region. ?????????????
create view revenue_per_region as
select regions.region_id, sum(revenue) from regions inner join countries;
select sum(revenue) from countries where regions_id=1;
select sum(revenue) from countries where regions_id=2;
select sum(revenue) from countries where regions_id=3;
select sum(revenue) from countries where regions_id=4;
4. Füllen Sie das revenue-Feld der Tabelle regions mit Hilfe des Views.
UPDATE regions SET "revenue" =(select sum(revenue) from countries where regions_id=1) WHERE region_id =1;
UPDATE regions SET "revenue" =(select sum(revenue) from countries where regions_id=2) WHERE region_id =2;
UPDATE regions SET "revenue" =(select sum(revenue) from countries where regions_id=3) WHERE region_id =3;
UPDATE regions SET "revenue" =(select sum(revenue) from countries where regions_id=4) WHERE region_id =4;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment