Ausgangslage in MySQL/MariaDB: Die Datensätze in einer Spalte sollen gezählt werden. Zusätzlich soll die Summe einer Spalte des JOINs ausgegeben werden. Die Spalte bei der gejointen Tabelle enthält aber nicht einfach eine Zahl. Dort stehen mehrere IDs, getrennt durch Komma. Oder alternativ auch mal NULL bzw. ein leerer String.
a.a b.b
----------------
1 17,29,40
2
3 100
4 1,3
5
6
7
8
9 2,9
10 99
----------------
10 9
================
Alles anzeigen
Ich will also das heraus bekommen, was in der letzten Zeile steht. Meine Idee nur mit SQL, wenn auch nicht ganz schön:
SELECT
COUNT('a.`a`') as 'a',
SUM(
IF(
LENGTH(b.`b`) > 0,
(1 + LENGTH(REGEXP_REPLACE(b.`b`, '[^,]+', ''))),
0
)
) as 'b'
Die Idee dahinter: Ersetze alles, was kein Komma ist. Dann können wir über die Stringlänge herausbekommen, wie viele Trennzeichen vorhanden sind. Zusätzlich schauen wir, ob der String leer bzw. NULL ist und addieren andernfalls eine 1 dazu. Zusammen mit der Anzahl der Trennzeichen sollte das über SUM() ein korrektes Ergebnis liefern. Vorausgesetzt die Daten enthalten kein unnötiges Komma am Anfang oder Ende oder gar doppelte Kommas mittendrin. Das ist zwar nicht der Fall, könnte man notfalls aber auch einfach ersetzen.
Alternative Vorschläge? 