Zum Inhalt springen

Oracle 10g: eine Spalte mehrmals abfragen


Empfohlene Beiträge

Geschrieben

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

Geschrieben
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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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?

Geschrieben

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

Geschrieben
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 :rolleyes:

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...