Zeichen von zwei Spalten auslesen und addieren

Sharete

Benutzer
Beiträge
7
Ich steh mal wieder mit der Syntax auf dem Schlauch..

Angenommen ich habe eine Tabelle (personal), nun möchte ich die Personalnummer (persnr), Vorname (vname) und Nachname (nname) ausgeben. Als letzte Spalte möchte ich die Anzahl der Buchstaben von dem Vornamen und Nachnamen ausgeben lassen (zusammen addiert). Zu beachten ist, dass in den Feldern, wo kein Nachname drinsteht, die Anzahl von den Vornamen als Ergebnis steht und nicht Null.

Ich habe an Length gedacht, jedoch kann ich nicht beide Spalten in einer Abfrage ausgeben, oder doch?
Mein Momentaner Stand ist:

SELECT
persnr, vname, nname, length(vname), length(nname) **length(vname,nname) funktioniert leider nicht**
FROM personal

Wie kann ich jetzt die beiden Length's in einer Spalte addiert ausgeben? Und sehe ich das richtig, dass wenn z.B. kein Nachname eingetragen wurde und der Wert Null vorhanden ist, auch Null ausgegeben wird und somit der Vorname nicht beachtet? Wie kann ich dem vorbeugen?

LG
 
Werbung:
persnr, vname, nname, length(vname), length(nname) **length(vname,nname) funktioniert leider nicht**
FROM personal

Diese Funktion erwartet einen Parameter, und liefert die Länge. Du kannst also length(string1) + length(string2) nutzen. Falls ein String NULL sein kann, kannst Du coalesce(length(string),0) nutzen, oder length(coalesce(string,'')).

Den Rest schaffst Du ;-)
 
Danke @akretschmer, hat so funktioniert, jedoch fordert das "Trainingsprogramm" eine andere Lösung und zwar eine String-Konkatenation. Also obwohl ich die gleiche Ausgabe habe, sagt er mir, dass die Lösung fehlerhaft ist. Hast du dafür vielleicht noch einen Tip?

Edit: Hat sich erledigt, war mein Fehler. Habe vergessen eine weitere Spalte einzufügen. Dank dir!
 
Bevor ich hier einen neuen Thread aufmache, direkt wieder eine Frage an dich @akretschmer :).

Ich bin gerade die Lektion "group by" durchgegangen und habe es soweit ganz gut verstanden und Aufgaben lösen können. Nun habe ich allerdings eine Aufgabe, wo ich zwei Tabellen joinen muss, um etwas zu zählen. Damit habe ich wiederum Schwierigkeiten. Könntest du mal rüber schauen, wo der Fehler liegt?

Code:
select
p.persnr, p.vorname, p.name, h.hobby, count(p.persnr) as anz_hob
from person p, hobbies h
where h.persnr = p.persnr
group by p.persnr

Wo liegt jetzt der Fehler? Bei einer simplen Aufgabe hat es funktioniert:

Code:
select
count(persnr)
from adresse
group by persnr
 
Du musst alle Spalten im Select entweder gruppieren oder aggregieren. Du hast aber nur die eine Spalte die du aggregierst count(p.persnr) gruppiert, das ergibt wenig Sinn. Ich denke du suchst eher soetwas:
Code:
select
p.persnr, p.vorname, p.name, count(h.persnr) as anz_hob
from person p, hobbies h
where h.persnr = p.persnr
group by p.persnr, p.vorname, p.name
h.hobby kann eigentlich nicht im Select stehen, du zählst ja verschiedene Hobbys. Wenn es im Select stehen soll musst du zusätzlich danach gruppieren und hast dann wieder mehrere Zeilen mit count() = 1.
 
Danke, deine Lösung hat mir geholfen und ist richtig. Leider kann ich noch nicht so wirklich nachvollziehen, wo mein Denkfehler lag bezüglich des Countbefehls. Wieso h,persnr anstatt p.persnr? Ist es im Prinzip nicht das gleiche? (Durch die Schlüsselfunktion)
 
Zuletzt bearbeitet:
Du musst alle Spalten im Select entweder gruppieren oder aggregieren. Du hast aber nur die eine Spalte die du aggregierst count(p.persnr) gruppiert, das ergibt wenig Sinn. Ich denke du suchst eher soetwas:
Code:
select
p.persnr, p.vorname, p.name, count(h.persnr) as anz_hob
from person p, hobbies h
where h.persnr = p.persnr
group by p.persnr, p.vorname, p.name
h.hobby kann eigentlich nicht im Select stehen, du zählst ja verschiedene Hobbys. Wenn es im Select stehen soll musst du zusätzlich danach gruppieren und hast dann wieder mehrere Zeilen mit count() = 1.

Als ein Beiwort, dass damit, dass man die nicht alle aggregieren ODER gruppieren muss, wusste ich inzwischen schon nichtmehr, auch den Fall, wo ich es gebraucht hätte nichtmehr, aber danke für die Erinnerung ;)
Hast auch ein Like bekommen ^^

(Hoffe, ein Post, welcher eine Lobung ausdrückt, ist erlaubt)
 
Werbung:
Du kannst auch count(*) verwenden, das spielt in diesem Fall keine Rolle. Durch die Gruppierung werden alle vorhandenen Varianten der Inhalte aus GROUP BY in jeweis eine Zeile zusammen gefasst, der Rest wird gezählt (also *).

Ich habe h.persnr gewählt um zu zeigen das ich Einträge der hobbies Tabelle zählen möchte, normalerweise setze ich dann den Primärschlüssel der Untertabelle. Natürlich würden auch doppelte Datensätze in der Haupttabelle gezählt, egal was in count() steht. Einen Unterschied hast du erst wenn etwas wie count(DISTINCT spalte) dort steht, ich weiß aber nicht, ob MySQL das unterstützt.
 
Zurück
Oben