1.4k Aufrufe
Gefragt in Datenbanken von
Mahlzeit zusammen,

für ein kleines Projekt bin ich derzeit dabei, etwas tiefer in SQL abzutauchen als ursprünglich geplant. Hierbei bin ich auf ein kleines Problem gestoßen - ich würde mich freuen, wenn mir hier jemand den richtigen Denkanstoß liefern könnte. Ich benötige keinen fertigen Code sondern lediglich ein paar Stichworte oder Links, damit ich mich bei der Lösungssuche nicht in die falsche Richtung verlaufen.

Und zwar habe ich zwei Datenbanktabellen, welche ich für eine Abfrage verbinden möchte. Hier mal ein simples Beispiel.

Tabelle 1: Städte
stadtID - name
1 Berlin
2 Hamburg
3 München

Tabelle 2: Restaurants
restaurantID - name - stadtID
1 Giovannis 2
2 Monte Castello 1
3 Luigis 2

Um eine Übersicht zu liefern, möchte ich die Städte in einer Tabelle ausgeben, welche die beiden Spalten 'Stadt' und 'Restaurants' enthält, wobei in letzterer die Anzahl der Restaurants in dieser Stadt eingetragen wird. Diese Anzahl über die Restaurants-Tabelle abzufragen ist ja kein Problem, jedoch möchte ich die Tabelle auch nach der Anzahl der Restaurants sortierbar machen.

Ich hatte erst überlegt, die Daten entsprechend in ein Array einzulesen und dieses nachzusortieren, da mein Fall jedoch nicht so simpel wie das Beispiel ist, wäre das ziemlich umständlich. Deswegen hier die Frage, ob es eine Möglichkeit gibt, solche abgeleiteten Werte in die SQL-Abfrage zu integrieren.

Inspektor Google war bislang leider keine große Hilfe, deswegen freue ich mich über jeden Hinweis.

Gruß, Alex

2 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Diese Anzahl über die Restaurants-Tabelle abzufragen ist ja kein Problem, jedoch möchte ich die Tabelle auch nach der Anzahl der Restaurants sortierbar machen.
Das versteh ich nicht: wenn du schon "Tabelle 2: Restaurants" nach stadtID gruppiert abfragst kannst du jenes Ergebnis doch auch gleich noch sortieren. Ich schließe daraus, dass dir GROUP BY gar nichts sagt, genausowenig ORDER BY. Meld dich, wenn du mit dem selbst herausfinden irgendwo hängst...
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Alex,

ich mach mal ein Versuch: Ein SQL sagt mehr als 1000 Worte:
SELECT Restaurants.Restaurantname, Staedte.Stadtname, Restaurantanzahl
FROM (Restaurants INNER JOIN Staedte ON Restaurants.stadtID = Staedte.StadtID)
inner join (SELECT stadtID, count(*) as Restaurantanzahl FROM Restaurants Group by StadtID) x on x.StadtID = Staedte.StadtID
ORDER BY Restaurantanzahl desc

Habe ein paar andere Feldnamen/Tabellennamen. Bei mir kommt folgendes raus:
Restaurantname Stadtname Restaurantanzahl
Luigis Hamburg 2
Giovannis Hamburg 2
Monte Castello Berlin 1


Gruß
Ralf
...