Zum Inhalt wechseln


Foto

SQL Abfragen

Lerngruppe MS SQL

  • Bitte melde dich an um zu Antworten
5 Antworten in diesem Thema

#1 Cahide

Cahide

    Newbie

  • 10 Beiträge

 

Geschrieben 16. November 2014 - 17:55

Guten Abend,

habe Verständnisprobleme bei folgender Aufgabenstellung:

 

Select the number of presidents having marriages in which a child was born on an average of minimal once in 5 years (starting with the year the wedding took place in, up to the year the spouse reached age 45).

 

Tabelle: president_marriage

 

spouse_name

spouse_age

nr_children

marriage_year

 

Ich habe die Aufgabe so verstanden, dass ich den SPOUSE_AGE abfragen soll, bei denen die Kinder beginnend mit der Ehe alle 5 Jahren geboren werden. 

 

Jetzt weiss ich aber nicht, wie der Syntax für "alle 5 Jahre" lautet. ich hatte mir überlegt, die Spalten MARIAGE_YEAR und NR_CHILDREN zu verknüpfen, aber leider finde ich keinen Ansatz. Bräuchte bitte Hilfe.

 

Kann ich eigentlich sagen, MARIAGE_YEAR + 5  WHERE NR_CHILDREN >=0; ?


Mein Ansatz war ja voll daneben, habe schon die Lösung :)


Bearbeitet von Cahide, 16. November 2014 - 17:50.


#2 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 17. November 2014 - 07:28

Dann lass Deine Lösung doch mal sehen :)

... ich denke, das "average" ist da'n wichtiges Stichwort...


My name is Frank, you can say you to me.

#3 Cahide

Cahide

    Newbie

  • 10 Beiträge

 

Geschrieben 26. November 2014 - 17:22

SELECT count(pres_id)

FROM pres_marriage 

WHERE nr_children >0 AND (45-spouse_age)/nr_children <5;

 

Sry für die Verspätung. 



#4 Cahide

Cahide

    Newbie

  • 10 Beiträge

 

Geschrieben 29. November 2014 - 21:39

ist das denn richtig? 



#5 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 01. Dezember 2014 - 08:55

Dein SPOUSE_AGE soll das Alter am Hochzeitstag sein?

Dann würde ich sagen, wäre Deine Lösung fast richtig ;) Den WHERE-Teil würde ich allerdings eher so sehen: WHERE nr_children >= (45-spouse_age)/5

...da ja durchschnittlich alle 5 Jahre zwischen Hochzeit und 45 min. ein Kind da sein soll.


My name is Frank, you can say you to me.

#6 Cahide

Cahide

    Newbie

  • 10 Beiträge

 

Geschrieben 05. Dezember 2014 - 19:48

Ah, ok das klingt natürlich viel logischer und sieht auch schöner aus.

Nachdem ich im internet wie b***d gesucht hatte, bin ich zu diesem Ergebnis gekommen und weil die Abfrage die richtige Lösung "ausgespuckt" hatte, wollte ich mich nicht mehr weiter um die Aufgabe kümmern  :D

 

 Jetzt bin ich aber an einer Aufgabe dran, wo ich Subqueries ohne Join benutzen soll..  :confused:  :confused:  :confused:

Aufgabe:

Determine name and years served of the President, who obtained the greatest number of votes ever.

 

TABALLE president:

id

name

birth_year

years_served

death_age

party

state_id_born

 

TABELLE election:

election_year

candidate

votes

winner_loser_indic

 

Meine Lösungsansatz:

 

SELECT p.name, p.years_served

FROM president p
WHERE p.name IN
(SELECT candidate 
FROM election 
GROUP BY candidate, votes 
HAVING votes = max(votes));
 
Die Stelle wo ich hängen bleibe ist, dass mit dem "ROW WITH MAX VOTES" ich weiss nicht, wie ich die Bedingung einbinden soll. habe mehreres Angewandt, doch leider ohne Erfolg. Bekomme jedes mal eine Fehlermeldung.




Auch mit einem oder mehreren der folgenden Tags versehen: Lerngruppe, MS SQL