SQL Abfrage nur in einer Spalte

Status
Für weitere Antworten geschlossen.
W

weingummi_99

Gast
Hallo zusammen,
ich zerbreche mir den Kopf über eine Abfrage. Stark vereinfacht sieht meine Ausgangstabelle so aus:
Vnr Alter
7893 4
9948 8
3847 9
3492 32
9458 55
1236 56
2459 21
3489 15
984 44
2340 45
(Ich hoffe man erkennt es)
Jetzt soll mir sowas angezeigt werden
Alter Anzahl
0-16 4
17-35 2
36-60 4
ich hab keinen Ansatz, da ich ja nur aus einer Spalte abfrage und mir der Rest egal ist.
Kann mir bitte jemand heeeelfen?!?
 
Du verstößt in deinem Beispiel gegen die erste Normalform des Datenbankdesigns

Kein Wunder dass du dir jetzt den Kopf zerbrechen musst.

Suche mal in der Dokumentation deines Datenbanksystems nach einer Splitfunktion für Texte und splitte dann bei einem Leerzeichen auf. Einmal vor dem Leerzeichen, einmal danach. Anschließend müsstest du Alter und Vnr in deiner Abfrage getrennt behandeln-, und somit auch damit arbeiten können.

Das Beste wäre aber natürlich die beiden Werte voneinander zu trennen und in zwei Spalten zu speichern.
 
Zuletzt bearbeitet:
select '0-16', count(*) from tabellenname where Alter <= 16
union
select '17-35', count(*) from tabellenname where Alter > 16 and Alter <= 35
union
select '36-60', count(*) from tabellenname where Alter > 35 and Alter <= 60;
 
Die Tabelle verstößt nicht gegen die erste Normalform. Alle Daten liegen Atomar vor.

Aber bitte benenne die Spalten nicht wie SQL-Schlüsselwörter. Alter ist das Schlüsselwort, um Tabellen und Datenbanken zu manipulieren (aber nicht die Inhalte, dafür gibt es INSERT INTO und UPDATE)
 
@wahli : Vielen Dank!!!
vielleicht noch ne winzig kleine Frage: wenn ich jetzt statt der Anzahl den Prozentsatz möchte, was muss ich dann tun?
 
SELECT '0-16', COUNT(*)/(SELECT COUNT(Vnr) FROM tabellenname) FROM tabellenname WHERE Alter <= 16
UNION
SELECT '17-35', COUNT(*)/(SELECT COUNT(Vnr) FROM tabellenname) FROM tabellenname WHERE Alter > 16 and Alter <= 35
UNION
SELECT '36-60', COUNT(*)/(SELECT COUNT(Vnr) FROM tabellenname) FROM tabellenname WHERE Alter > 35 and Alter <= 60;

Das ganze nennt sich Subselect.
 
@paccoderpster : Suuper! Vielen Dank!!!!

;) und Danke fürs "nicht-auslachen"
 
paccoderpster schrieb:
Aber bitte benenne die Spalten nicht wie SQL-Schlüsselwörter. Alter ist das Schlüsselwort, um Tabellen und Datenbanken zu manipulieren (aber nicht die Inhalte, dafür gibt es INSERT INTO und UPDATE)

Solange er stets konsequent alle Tabellen- und Spaltennamen in SQL Anweisungen maskiert (SQLServer: [spalte], MySQL: `spalte`), oder ORMs verwendet, die das sowieso tun, spricht technisch nichts dagegen.
 
uiii es wird noch komplizierter:

Ausgangstabelle (vereinfacht):
Vnr Geschlecht Kind
7893 M J
9948 W N
3847 W N
3492 M N
9458 M J
1236 M J
2459 W J
3489 W N

Hier soll die Anzahl M und W und J angegeben werden , d.h. Wenn für Kind ein J steht gilt es als Kind und nicht mehr al W oder M muss also abgezogen werden. Ich hoffe das ist verständlich. oder einfacher herauskommen sollte das:

Geschlecht Anzahl
M 1
W 3
J 4
 
Deine Haus- oder Übungsaufgaben solltest du wirklich selber lösen, vor allem wenn anscheinend keine Eigenleistung erbracht wird.
Siehe Regeln.

Bei konkreten Wissenslücken darf gerne gefragt werden, aber hier einfach Aufgabenstellungen zu posten und auf Antworten zu hoffen ist nicht erwünscht.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben