| 

.NET C# Java Javascript Exception

3
Wie formuliere ich folgende Aufgabenstellung?
In welcher Stadt leben die meisten Menschen und wie viele sind es.

Folgendes Schema gilt: (Vorname, Nachname, Geburtstag, Stadt)

Gruß Piet
News:
12.10.2009
piet 181 2 3
2 Antworten
8
Je nach verwendetem DBMS gäbe es die Möglichkeit eine einfache Gruppierung mit Sortierung zu verwenden und dann mit LIMIT, TOP, etc. nur den ersten DS auszugeben:
Beispiel für MySQL mit LIMIT
select Stadt, count(*) Anz_Personen
from tabelle
group by Stadt
order by count(*) desc
limit 1;

Die andere Variante ist die gruppierte Abfrage und ein einschränkendes HAVING mit einem Subselect MAX vom Subselect:
select Stadt, count(*) Anz_Personen
from tabelle
group by Stadt
having count(*) = (
select max(Anz_Personen) from (
select Stadt, count(*) Anz_Personen
from tabelle
group by Stadt
)
)

Beides gilt unter der Voraussetzung, dass die Personen eindeutig sind, d.h. keine Doppelungen vorkommen und jeder Datensatz auch tatsächlich einer Person entspricht.
12.10.2009
FalkP 3,3k 3 8
1
Alles Klar, danke für den Hinweis FalkP
Dustin Klein 12.10.2009
2
In MSSQL müßte man es so schreiben:

select Top 1 Stadt, count(*) Anz_Personen
from tabelle
group by Stadt
order by count(*) desc
Floyd 12.10.2009
1
Das zweite Statement ist doch eherlich ein Griff ins Klo, viel zu aufwändig in der ausführung und macht genau das gleiche wie die schnelle variante oben.
Sinnvollerweise muss man auf Stadt aber einen Index legen, sonst läuft alles zu langsam.
tomahlak 23.10.2009
1
Es soll tatsächlich Datenbanken geben, die zwar SQL können aber kein TOP, LIMIT, etc. kennen.
Also muss man manchmal auch ins "Klo greifen"...
FalkP 23.10.2009
-2
Wie sieht denn die Tabellenstruktur aus? Hast du zu jeder Stadt eine Tabelle, in der alle Einwohner eingetragen sind oder eine Tabelle in der zu jeder Person eine Stadt mit eingetragen wird?

Dementsprechend anders sieht das SQL Query aus, für die Personen mit einer eingetragenen Stadt dahinter zum Beispiel so:

SELECT COUNT(*) FROM tbl_personen WHERE stadt = 'stadtname';


Ist jetzt nur ein Beispiel, falls du die COUNT() Funktion gesucht hast. Anderenfalls brauch ich auf jeden Fall die Struktur deiner Tabellen.
12.10.2009
Dustin Klein 2,9k 2 9
2
Anmerkung: Solch eine Nachfrage ist KEINE Antwort und deshalb etwas für einen Kommentar zur Frage!
FalkP 12.10.2009
1
Wobei er in seinem Kommentar auch gleich die Frage beantwortet hätte (zumindest fast vollständig - "order by count(*) desc" fehlt. Läßt sich also drüber streiten ob es als Antwort zählt oder nur ein Kommentar ist.
Floyd 12.10.2009
2
Dann hast du offensichtlich die Frage nicht richtig gelesen und / oder die Abfrage nicht verstanden! Ein SELECT COUNT(*) FROM tbl_personen WHERE stadt = 'stadtname' liefert die Anzahl der Einträge (Personen) für eine ganz bestimmte Stadt und hat IMMER nur einen DS als Ergebnis. Ein ORDER BY bringt hier also gar nichts. Gefragt war jedoch "In welcher Stadt leben die meisten Menschen und wie viele sind es."
Also wenn es der Versuch einer Antwort war, dann war er grottenschlecht weil grundfalsch ;)
FalkP 13.10.2009

Stelle deine Sql-Frage jetzt!