Cahide 1 Geschrieben 15. November 2014 Melden Teilen Geschrieben 15. November 2014 Hallo, könnte mir jemand bei der Aufgabenstellung helfen. ich komm nicht auf die richtige Lösung. Aufgabenstellung: How many states brought forth a president born before 1900? Meine Lösung: SELECT (name(state)) FROM state INNER JOIN president ON birth_year <= 1900; -- Table: state -- DROP TABLE state; CREATE TABLE state ( id serial NOT NULL, name character varying(15) NOT NULL, admin_id integer, year_entered integer, CONSTRAINT prim_key_state PRIMARY KEY (id), CONSTRAINT state_fk1 FOREIGN KEY (admin_id) REFERENCES administration (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT check_year_entered CHECK (year_entered >= 1600 AND year_entered <= 2100) ) WITH ( OIDS=FALSE ); ALTER TABLE state OWNER TO postgres; COMMENT ON TABLE state IS 'States, added in year and under which president.'; -- Table: president -- DROP TABLE president; CREATE TABLE president ( id serial NOT NULL, name character varying(20) NOT NULL, birth_year integer, years_served smallint, death_age smallint, party character varying(10), state_id_born integer, CONSTRAINT prim_key_pres PRIMARY KEY (id), CONSTRAINT president_fk1 FOREIGN KEY (state_id_born) REFERENCES state (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT check_birth_year CHECK (birth_year >= 1600 AND birth_year <= 2100), CONSTRAINT check_death_age CHECK (death_age > 20 OR death_age IS NULL) ) WITH ( OIDS=FALSE ); ALTER TABLE president OWNER TO postgres; COMMENT ON TABLE president IS 'President name, birth year etc.'; -- Index: ipres -- DROP INDEX ipres; CREATE INDEX ipres ON president USING btree (party COLLATE pg_catalog."default"); Eine Andere Frage: darf ich hier überhaupt Fragen zum Thema SQL Abfragen stellen oder bin ich im falschem Film? Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 15. November 2014 Melden Teilen Geschrieben 15. November 2014 Hallo, was ist eigentlich das Ziel der Fragen? Du arbeitest doch nicht an einem konkreten Problem, oder? Deine Beispiele hören sich wie aus einem Lehrbuch abgeschrieben an. Wenn Du übst und lernst, installiere einen SQL-Server und probiere die Lösungsansätze selbst aus. Dabei können wir nicht helfen. -Zahni Zitieren Link zu diesem Kommentar
Cahide 1 Geschrieben 15. November 2014 Autor Melden Teilen Geschrieben 15. November 2014 Das sind meine Hausaufgaben. Ich will ja keine Lösung. sondern einfach nur Hilfestellung oder Tipps. Ich habe gedacht, hier kann ich um Hilfe erfragen, deswegen hatte ich ja gefragt, ob ich hier solche fragen stellen darf. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 15. November 2014 Melden Teilen Geschrieben 15. November 2014 Du darfst Fragen stellen. Allerdings ist oben Dein einziges Fragezeichen an der Frage, ob Du Fragen stellen darfst ;-) Und die Frage "könnte jemand ...helfen?" (wenn wir uns hier das Fragezeichen vorstellen) ist doch etwas zu allgemein. Wo hakt's denn genau? Ist der SQL-Code Teil der Aufgabe oder soll das u.a. Deine Lösung repräsentieren? Da die Fragestellung mit "How many..." anfängt, wäre möglicherweise ein "Count(...)" ein brauchbarer Hinweis für Deinen Code. ... und bei nem Inner Join sollten mit "ON" die in den zu joinenden Tabellen referenzierten Felder angegeben werden, nicht die WHERE-Klausel... Zitieren Link zu diesem Kommentar
Pathomorph 1 Geschrieben 15. November 2014 Melden Teilen Geschrieben 15. November 2014 Erstmal musst du überlegen, was die Verbindung zwischen den 2 Tabellen ist. In der Tabelle "president" ist ein Feld "state_id_born". Dort ist sicher die id aus der Tabelle "state" gespeichert, damit Daten nicht redundant gespeichert werden. Genau diese Verbindung wird mit "ON" beschrieben: SELECT blabla FROM president INNER JOIN state ON president.state_id_born = state.id Dann kommt die WHERE-Klausel, um die Datenmenge einzuschränken bzw. zu filtern: ... WHERE president.birth_year <= 1900 jetzt ist die Frage nach der Anzahl dieser Staaten: Wie Cyberquest schon sagt: COUNT! --> SELECT Count(*) FROM president INNER JOIN state ON president.state_id_born = state.id WHERE president.birth_year <= 1900 Kleiner Tip: SQL-Statements lieber strukturieren, damit du später noch durchblickst: SELECT Count(*) FROM president INNER JOIN state ON president.state_id_born = state.id WHERE president.birth_year <= 1900 Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 15. November 2014 Melden Teilen Geschrieben 15. November 2014 Hmmm... da es "Hausaufgaben" sind, wollte ich nur nen Denkanstoß geben. Ihm die fertige Lösung zu präsentieren, halte ich eigentlich für nicht zielführend! ... aber schön erklärt... ...wobei m.E. eh ein Fehler in Deiner Lösung ist, da da ja die Präsidenten gezählt werden und nicht die Staaten... oder seh ich das falsch? ;) Zitieren Link zu diesem Kommentar
Cahide 1 Geschrieben 15. November 2014 Autor Melden Teilen Geschrieben 15. November 2014 Fragen werden mit Fragezeichen beendet. Hab´s vergessen, wird in Zukunft nicht mehr passieren :) . Genau, der SQL Code sollte meine Lösung repräsentieren, habe aber die Aufgabe schon gelöst: SELECT COUNT(DISTINCT(state_id_born)) FROM president WHERE birth_year <1900; Lösung = COUNT 14 ( sollte laut Lösungen richtig sein). Mein Problem liegt bei der Syntax von Queries ( habe erst gestern angefangen mit SQL(PostgreSQL) zu arbeiten). Trotzdem Danke für die Lösung. Allerdings möchte ich bitte keine Lösungen, denn ich will es ja auch verstehen. 1 Zitieren Link zu diesem Kommentar
Pathomorph 1 Geschrieben 15. November 2014 Melden Teilen Geschrieben 15. November 2014 Richtig, Cyberquest! ;-) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.