Commit 650b7f4c authored by maa676's avatar maa676

senden

parent 08e85c22
--1. Geben Sie alle Bestellungen aus, die "mark" im ship_name enthalten, unabhängig von Groß und Klein-Schreibung
--select * from orders where ship_name ilike '%mark%';
select * from orders where ship_name ilike '%mark%';
--2. Geben Sie alle Orders aus, die vom shipper Federal Shipping versendet wurden
--select * from orders, shippers where orders.ship_via =shippers.shipper_id and shippers.company_name = 'Federal Shipping';
select * from orders, shippers where orders.ship_via =shippers.shipper_id and shippers.company_name = 'Federal Shipping';
--3. Geben Sie den 4.-10. Kunden (customers) aufwärts nach Name aus
--select * from customers order by contact_name offset 3 limit 7;
select * from customers order by contact_name offset 3 limit 7;
--4. Geben Sie alle Titel der Kunden aus ohne doppelte Einträge
--select distinct contact_title from customers
select distinct contact_title from customers
--5 . Geben Sie alle Kunden aus, die Marketing Manager sind und aus Deutschland oder Frankreich kommen
--select * from customers where contact_title='Marketing Manager' and (country='Germany'or country='France' );
select * from customers where contact_title='Marketing Manager' and (country='Germany'or country='France' );
--6. Geben Sie alle Produkte aus, die mehr als 100.0 kosten
--select * from products where unit_price > 100;
select * from products where unit_price > 100;
--7. Geben Sie alle Produkte aus, die für mehr als 100.0 verkauft wurden
--select * from products inner join order_details on products.product_id=order_details.product_id where order_details.unit_price>100;
select * from products inner join order_details on products.product_id=order_details.product_id where order_details.unit_price>100;
--8. Geben Sie den Durchschnitts-Preis aller Produkte an
--select avg(unit_price) from products;
select avg(unit_price) from products;
--9. Geben Sie die Differenzen aller Preise der produkte zum Durschnittspreis an
--select product_name, unit_price-(select avg(unit_price) from products)as dif from products;
select product_name, unit_price-(select avg(unit_price) from products)as dif from products;
--10. Geben Sie den maximalen und minimalen Preis der Produkte aus
--select min(unit_price),max(unit_price)from products;
select min(unit_price),max(unit_price)from products;
--11. Geben Sie die Anzahl aller Bestellungen aus Deutschland aus
--select count(order_id)from orders where ship_country='Germany';
select count(order_id)from orders where ship_country='Germany';
--12. Geben Sie die Summe aller Bestellungen aus Deutschland aus
--select sum(unit_price) from orders inner join order_details on orders.order_id=order_details.order_id where ship_country='Germany';
select sum(unit_price) from orders inner join order_details on orders.order_id=order_details.order_id where ship_country='Germany';
--13. Geben Sie den Namen (customer_Id) aller Bestellungen aus, allerdings nur den 2. - 4. Buchstaben
--select substring(customer_id,2,3) from orders;
select substring(customer_id,2,3) from orders;
--14. Geben Sie den ersten Buchstaben des Namens aller Ländern als ASCII-Code aus
--select ascii(substring(ship_country,1,1))from orders;
select ascii(substring(ship_country,1,1))from orders;
--15. Geben Sie die Zeichenlänge der Namens aller Länder aus
--select ship_country,length(ship_country) from orders;
select ship_country,length(ship_country) from orders;
--16. Geben Sie die Adressen der Customers und der Orders in nur einer Abfrage aus
--select ship_address from orders union all select address from customers;
select ship_address from orders union all select address from customers;
......
--1. Selektieren Sie 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