Leider finde ich nicht den passenden Befehl zu einer ganz simplen
Frage:
Wie zähle ich die Anzahl der gesetzten Elemente in einem SET?
gegeben:
feld1 INT
feld2 SET('a','ab','abc','abcd','abcdef')
Tabelle
1 a,ab
2 abcd
3 abc
4 ab,abcd,abcdef
Ergebnis sollte sein:
SELECT feld1, ZAEHL_ELEMENTE_IN_SET(feld2)
1 2
2 1
3 1
4 3
COUNT() funktioniert hier nicht, da hier die Anzahl der Zeilen (die
eine gewisse Eigenschaft erfüllen) gezählt wird.
LENGTH() ergibt die Anzahl der Buchstaben, demnach wäre Zeile 1 und 3
gleich lang (3 Buchstaben)
Gruß
Gunnar
> COUNT() funktioniert hier nicht, da hier die Anzahl der Zeilen (die
> eine gewisse Eigenschaft erfüllen) gezählt wird.
> LENGTH() ergibt die Anzahl der Buchstaben, demnach wäre Zeile 1 und 3
> gleich lang (3 Buchstaben)
mysql> create temporary table t (a set('a','b','d'));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t values ('a'),('a,d'),('a,d,b');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select a from t;
+-------+
| a |
+-------+
| a |
| a,d |
| a,b,d |
+-------+
3 rows in set (0.00 sec)
mysql> select a,BIT_COUNT(a) from t;
+-------+--------------+
| a | BIT_COUNT(a) |
+-------+--------------+
| a | 1 |
| a,d | 2 |
| a,b,d | 3 |
+-------+--------------+
3 rows in set (0.04 sec)
HTH,
Thomas
Das ist es! Vielen, vielen Dank!
Nebenrede: Ich hatte schon lange nach einem Befehl gesucht, der das
Maximum _innerhalb_ einer Zeile (über mehrere Spalten) findet. MAX()
findet die Zeile bezogen auf eine Spalte. Die Lösung lautet
GREATEST(), und dies herauszufinden dauerte eine ganze Weile.
Nachfragen ist eben doch schneller. Vielleicht bittet jemand die
Manual-Autoren, einen entsprechenden Querverweis bei MAX()
anzubringen.
Grüße
Gunnar
Das kannst du selber tun. Geh zu bugs.mysql.com und erzeuge einen
neuen Bug Report. Kategorie "Server: Documentation", Severity
"S4 - Feature Request". Dann schreib, welche Änderung du gerne
im Manual sehen möchtest.
XL