Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Anzahl der Elemente in einem SET zaehlen

1 view
Skip to first unread message

Gunnar Lindenblatt

unread,
Jun 19, 2010, 6:03:52 AM6/19/10
to
Hallo!

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

Thomas Rachel

unread,
Jun 19, 2010, 7:59:44 AM6/19/10
to
Am 19.06.2010 12:03, schrieb Gunnar Lindenblatt:

> 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

Gunnar Lindenblatt

unread,
Jun 19, 2010, 9:33:40 AM6/19/10
to
Am 19 Juni um 13:59 schrieb Thomas Rachel:

> Am 19.06.2010 12:03, schrieb Gunnar Lindenblatt:
> [Wie zähle ich die Anzahl der Elemente in einem SET?]

> mysql> select a,BIT_COUNT(a) from t;

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

Axel Schwenke

unread,
Jun 19, 2010, 9:56:19 AM6/19/10
to
Gunnar Lindenblatt <Gunnar.Li...@pobox.com> wrote:
>
> 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.

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

0 new messages