Commit ef4316fa authored by Noureddine Mustapha's avatar Noureddine Mustapha

Upload New File

parent 12d82540
-- Wert "United States" in "USA"
update countries set name='USA' where name='United States';
--4. Fgen Sie eine Geometrie-Spalte zur Tabelle regions hinzu, die Koordinaten des Ortes der (Sales) regions aufnehmen kann. Whlen Sie einen sinnvollen Geometrie-Datentyp.
select addgeometrycolumn('regions','headquarter_coor',4326,'Point',2);
--5. Fgen Sie per SQL/PostGIS fr die vier Orte die Koordinaten von Wikipedia ein, x und y mssen getauscht werden.
update regions set headquarter_coor = ST_SetSRID(st_makepoint(13.4083,52.5186),4326) where region_headquarter_city='Mainz';
update regions set headquarter_coor = ST_SetSRID(st_makepoint(-3.7039,40.4125),4326) where region_headquarter_city='Madrid';
update regions set headquarter_coor = ST_SetSRID(st_makepoint(-80.2242,25.7878),4326) where region_headquarter_city='Miami';
update regions set headquarter_coor = ST_SetSRID(st_makepoint(-43.1964,-22.9083),4326) where region_headquarter_city='Rio de Janeiro';
--1 das Kreuzprodukt von countries und regions mit den Geometrien in einen View countries_x_regions. (siehe 3.4.5). Fllen Sie countries_x_regions in diesem Schritt mit Distanzen aller Geometrie-Kombinationen, die Sie mit dem Kreuzprodukt erstellt haben.
create view countries_x_regions as
select regions.region_id,regions.region_headquarter_city,regions.headquarter_coor, countries.name, countries.geom, ST_Distance(regions.headquarter_coor,countries.geom)
as dist from regions cross join countries;
--2 Bestimmen Sie die minimalen Distanzen aus countries_x_regions mit einem View minimal_distances mit dem zugehrigen Country-Namen und der region_id. Verwenden Sie eine inner join mit einer geschachtelten Abfarage zur Bestimmung der Minimal-Distanzen (postGIS-Funktion) pro Land (gruppiert nach dem Namen).
create view minimal_distances as
select region_id,region_headquarter_city, cr.name,dist 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. Ergnzen Sie die countries Tabelle um ein Attribut zum Speichern eines Femdschlssel fr die Beziehung zu regions.
alter table countries add column regions_id integer;
--4. Weisen Sie jedem countries-Datensatz die region_id ber den Lndernamen zu (UNter Nutzung des Views minimal_distances).
update countries set regions_id=minimal_distances.region_id from minimal_distances where minimal_distances.name=countries.name;
--5. Erzeugen Sie den Fremdschlssel bzw. die Beziehung zwischen countries und regions.
alter table countries add constraint regions_fk foreign key (regions_id) references regions(region_id);
--6. Korrigieren Sie ggf. ungltige Geometrien mit einem Update der countries-Tabelle mit ST_makevalid und ST_isValid.
update countries set geom=st_makevalid(geom) where not st_isvalid(geom);
--7. Erzeugen Sie die Vertriebsregionen mit Vereinigungen der beteiligten countries. Fgen Sie dazu zunchst ein neues Geometrieattribut mit dem Geometrie-Typ MULTIPOLYGON zur regions Tabelle hinzu.
select addgeometrycolumn('regions','geom',4326,'Multipolygon',2);
update regions set geom=ST_union(array(select geom from countries where regions_id=1))where region_id=1;
update regions set geom=ST_union(array(select geom from countries where regions_id=2))where region_id=2;
update regions set geom=ST_union(array(select geom from countries where regions_id=3))where region_id=3;
update regions set geom=ST_union(array(select geom from countries where regions_id=4))where region_id=4;
--1. Fgen 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. Fllen Sie das neue Feld der Tabelle countries aus dem View revenue_per_country aus Aufgabe 3.4 ber den Lndername
update countries set revenue=revenue_per_country.sum from revenue_per_country where revenue_per_country.ship_country= countries.name;
--3. Erzeugen Sie einen View revenue_per_region fr die Umstze der regions, basierend auf der Summe der jeweiligen countries-Umstze einer Region.
drop view revenue_per_region;
create view revenue_per_region as
select regions_id,sum(countries.revenue)as region_revenue from countries group by regions_id;
--4. Fllen Sie das revenue-Feld der Tabelle regions mit Hilfe des Views.
update regions set revenue=region_revenue from revenue_per_region where regions.region_id=revenue_per_region.regions_id;
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