bionaut Geschrieben 5. September 2007 Teilen Geschrieben 5. September 2007 Hallo zusammen, SQL ist nicht mein Spezialgebiet und deshalb richte ich meine Frage an Euch. Ich habe eine Tabelle mit folgenden Werten. Zeit Strasse Geschwindigkeit 09:00 Waldstr. 37 09:05 Bergstr. 61 09:10 Bergstr. 63 09:15 Waldstr. 84 09:20 Hohemark 10 09:25 Hohemark 29 09:30 Waldstr. 95 09:35 Bergstr. 9 09:40 Bergstr. 20 09:45 Waldstr. 16 09:50 Waldstr. 21 09:55 Hohemark 8 10:00 Hohemark 57 10:05 Hohemark 76 10:10 Bergstr. 74 Jetzt würde ich gerne wissen, wie viele in jeder Strasse unter 30, zw. 30 und 50 und über 50 gefahren sind. In der Art von SELECT Strasse, count(Geschwindigkeit<=30), count(Geschwindigkeit>30und <=50), count(Geschwindigkeit>50) FROM tabelle GROUP BY Strasse; Ergebnis so (Werte stimmen nicht mit Tabelle oben überein): Strasse "v < 30" "v > 30 < 50" "v > 50" Waldstr 3 5 7 Bergstr 2 4 6 Hohemark 5 3 5 Ich weiss das oben geschriebenes Statement nicht funktioniert Nur hört an dieser Stelle mein SQL-Wissen auf. Habe schon meinen dicken Leitz mit SQL Unterlagen durchwühlt aber nichts gefunden was ich verwerten könnte. Hoffe es kann mir einer helfen, hoffe ich habe es verständlich beschrieben. Die besten Grüße Andreas Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jan Jansen Geschrieben 5. September 2007 Teilen Geschrieben 5. September 2007 SELECT DISTINCT strasse , (SELECT count(strasse) FROM tabelle WHERE strasse=a.strasse AND geschwindigkeit<30) , (...) , (...) FROM strasse a Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 6. September 2007 Teilen Geschrieben 6. September 2007 sollte man nicht mit left oder right joins arbeiten, group by benutzen und having Geschwindigkeit > 30, between 30 and 50 .... arbeiten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grueni Geschrieben 6. September 2007 Teilen Geschrieben 6. September 2007 sollte man nicht mit left oder right joins arbeiten, group by benutzen und having Geschwindigkeit > 30, between 30 and 50 .... arbeiten? Was spricht gegen die Lösung mit Subqueries? Ich wüßte jetzt auf Anhieb nicht, wie ich das mit Joins, Group by und having lösen könnte. Hast du ein konkretes Beispiel für deinen Lösungsansatz? Würde mich nämlich brennend interessieren. :beagolisc Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bionaut Geschrieben 6. September 2007 Autor Teilen Geschrieben 6. September 2007 @jan: habs gerade ausprobiert, die Ergebnisse sind auf jedenfall interessant aber nicht ganz stimmig mit dem was ich erwartet habe (ca. um dem Faktor 100-1000 zu hoch). @rest: joins waren mir immer ein graus ... bin natürlich aber für alle Möglichkeiten offen. Aber ich spiel noch ein wenig mit dem SQs rum. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jan Jansen Geschrieben 6. September 2007 Teilen Geschrieben 6. September 2007 Eine ungetestete Lösung über Join/Subqueries: SELECT a.strasse, b.anz, c.anz, d.anz FROM ()a LEFT JOIN ()b ON a.strasse=b.strasse LEFT JOIN ()c ON a.strasse=c.strasse LEFT JOIN ()d ON a.strasse=d.strasse Ein Left join über 4 Subqueries a. Liste der Strassen SELECT DISTINCT strasse FROM tabelle b. < 30km SELECT strasse, count(strasse) anz FROM tabelle WHERE geschwindigkeit<30 GROUP BY strasse c. >30 <50 ... d. ... Subquery ()a braucht man um auch dann Daten zu erhalten, wenn in einer Kategorie (z.B <30km) keine/weniger Strassen vorhanden sind Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bionaut Geschrieben 6. September 2007 Autor Teilen Geschrieben 6. September 2007 Das mit den JOINs hat geklappt, danke für den Tip, da wäre ich nie drauf gekommen. Aber länger ich drüber schaue, desto logischer wirds. Besten Dank Andreas Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 6. September 2007 Teilen Geschrieben 6. September 2007 Und auch ganz ohne Join: SELECT count(*),strasse ,'Geschwindigkeit unter 30' Geschwindigkeit WHERE geschwindigkeit < 30 GROUP BY strasse UNION ALL SELECT count(*),strasse ,'Geschwindigkeit zw. 30 und 50' Geschwindigkeit WHERE geschwindigkeit between 30 and 50 GROUP BY strasse UNION ALL SELECT count(*),strasse ,'Geschwindigkeit größer 50' Geschwindigkeit WHERE geschwindigkeit between 30 and 50 GROUP BY strasse; Dim PS: Wieso Outer Joins? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 6. September 2007 Teilen Geschrieben 6. September 2007 das wird meines wissens nicht funktionieren, da bei union die spalten identisch sein müssen und ausserdem untereinander eingefügt werden ... bei joins wirds quasi nebeneinander eingefügt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 7. September 2007 Teilen Geschrieben 7. September 2007 das wird meines wissens nicht funktionieren Jep hast recht. Hab überall die FROM Klausel vergessen... :old Ausserdem ist beim letzten SQL die WHERE Bedingung falsch da bei union die spalten identisch sein müssen Ne das passt schon. Sind ja alle vom gleichen Typ. bei joins wirds quasi nebeneinander eingefügt Stimmt. Mein Statement liefert das Ergebnis untereinander. Da müsste man noch pivotieren. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.