FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Praktische Informatik

Gdb : Sql

Gdb : Sql 2009-01-30 18:08
Mr.Powers
Ist die rein folge der Relationen in der from Klausel in sql egal???
Und wann ich welchen Join in der Where Klausel ausführe?

Noch eine kleine frage die Having Klausel :Having count (*)>2 ,nehmen wir an wir haben vorher Group by x gemacht dann sorgt Having count(*) dafür das nur die Gruppen weiter betrachten werden die mehr als zwei Tupel beinhalten die gleich sind im zur sortierenden Attribut x oder???

Aufgabenblatt 4 Musterlösung Aufgabe 3.10) was zählt das Count(*)
Und wie soll Group by mit zwei Attributen gehen?
Wäre folgendes Statement nicht auch richtig?
Select Reiter, COUNT (Pferd)
From Reitet
Group by Reiter;
??

RE: Gdb : Sql 2009-01-30 20:18
Tzwoenn
Unterschiedliche Reihenfolgen der Argumente sollten im Sinne der Relationenalgebra dasselbe Ergebnis produzieren. Es kann allerdings sein, dass JOINs die Bestandteil der Selektion und nicht der Projektion sind abhängig vom Queryplaner unterschiedlich gut optimiert werden können und entsprechend verschieden lange Ausführungszeiten nach sich ziehen.

HAVING COUNT(*) > 2 listet als Ergebnis nur Gruppierungen mit mehr als 3 Tupeln, ja. Also beispielsweise "SELECT age, COUNT(*) FROM student GROUP BY age HAVING COUNT(*) > 10" nur Tupel der Form (Altersgruppe, Anzahl), wenn die Anzahl der Personen des jeweiligen Alters größer als 10 ist.

Gruppierungen über mehrere Attribute können per Kommata erreicht werden.

RE: Gdb : Sql 2009-02-02 15:57
Mr.Powers
SELECT p.Rasse, AVG(p.Alter)
FROM Pferd p, Behandelt b
WHERE p.HID = b.Pferd
AND b.Grund = ’Schnupfen’
GROUP BY p.Rasse
HAVING COUNT(*) >= 5;

Darf man in denn klammern des Count auch eine Bedingung nennen ? also wäre folgende anfrage auch korrekt?
SELECT p.Rasse, AVG(p.Alter)
FROM Pferd p, Behandelt b
WHERE p.HID = b.Pferd
GROUP BY p.Rasse
HAVING COUNT(grund = "Schnupfen") >= 5;

RE: Gdb : Sql 2009-02-02 21:14
Anonymer User
SELECT p.Rasse, AVG(p.Alter)
FROM Pferd p, Behandelt b
WHERE p.HID = b.Pferd
AND b.Grund = ’Schnupfen’
GROUP BY p.Rasse
HAVING COUNT(*) >= 5;

Darf man in denn klammern des Count auch eine Bedingung nennen ? also wäre folgende anfrage auch korrekt?
SELECT p.Rasse, AVG(p.Alter)
FROM Pferd p, Behandelt b
WHERE p.HID = b.Pferd
GROUP BY p.Rasse
HAVING COUNT(grund = "Schnupfen") >= 5;
Ich kenne kein COUNT, das Bedingungen auswerten kann.

Folgendes müsste aber gehen:
SELECT p.Rasse, AVG(p.Alter),
SUM(IF(grund = "Schnupfen";1;0)) AS AnzahlSchnupfen
FROM Pferd p, Behandelt b
WHERE p.HID = b.Pferd
GROUP BY p.Rasse
HAVING AnzahlSchnupfen >= 5;

RE: Gdb : Sql 2009-02-02 21:22
Anonymer User
Musterlösung :
SELECT count(*)
FROM Verein v, Person p1, Person p2
WHERE v.Trainer = p1.PID
AND v.Kapitän = p2.PID
AND p1.Alter < p2.Alter;

Meine lösung:
Select count(V.Name)
From Verein V, Person P
where V.Trainer = P.Pid And P.Alter <( Select Alter
From V.Verein ,S.Spieler , Person P
where P.Pid=S.Pid And S.Pid=Kapitän);

Würde das auch gehen?

RE: Gdb : Sql 2009-02-03 10:54
Anonymer User
Im Skript heist es
Bemerkung:
In SQL2 kann (im Rahmen der Erzeugung von Relationen) nicht spezifiziert werden,
dass ein Vater einen Sohn haben muss, z. B. [1,n]; die Anzahl der Söhne lässt sich
nicht einschränken (außer [0,1]).

Wie würde das Erm dazu aus sehen??

RE: Gdb : Sql 2009-02-14 16:10
Mr.Powers
Blatt 6 Aufgabe 1
SELECT *
FROM Person p
WHERE p.Alter > ALL
(SELECT Alter
FROM Pferd
WHERE Rasse=’Araber’);
Lösungsvorschlag:

SELECT p.PID, p.Name, p.Alter, p.Herkunft
FROM Person p, Pferd pf
WHERE pf.Rasse=’Araber’
GROUP BY p.PID, p.Name, p.Alter, p.Herkunft
HAVING(p.Alter>MAX(pf.Alter));

Warum muss man hier nach denn ganzen Attributen gruppieren würde es nicht reichen einfach nur nach alter zu gruppieren??

RE: Gdb : Sql 2009-02-14 18:11
X3K6A2
Warum muss man hier nach denn ganzen Attributen gruppieren würde es nicht reichen einfach nur nach alter zu gruppieren??

Das wuerde dazu fuehren das wenn alle Pferde ein Alter haben nur ein Tupel zurueckgegeben wird, was offensichtlich nicht das gleiche Verhalten wie bei der original Anfrage ist.