Jump to content

SQL Abfragen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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?
Link zu diesem Kommentar

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...

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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? ;)

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...