Rene M.: mysql + aggregate functions ohne group by

moin, moin

mysql hat aggregate functions.
unter anderem  sum() und count() und max() und min()

die darf man nur mit GROUP BY verwenden.

ich muss herausfinden, wieviele personen einen namen haben
der mit T anfängt.

mysql> SELECT COUNT(*) FROM kinder WHERE vorname LIKE '%a%' GROUP BY id;
+----------+
| COUNT(*) |
+----------+
|        1 |
|        1 |
|        1 |
|        1 |
|        1 |
|        1 |
|        1 |
|        1 |
+----------+
8 rows in set (0.00 sec)

okay, 8 ergebnise also.   Aber kann das mysql nicht als einfache
zahl '8' ausgeben?

ohne GROUP BY gibt mysql 8 aus,
aber ohne GROUP BY darf mans gar nicht tun und weiters
ist auch unklar warum das dann überhaupt geht weil mysql
keine angabe erhält was zu gruppieren ist.

thanx....
Rene

  1. Hi,

    die darf man nur mit GROUP BY verwenden.

    nein. Wenn Du noch _zusätzliche Werte_ selektierst, machen Aggregatfunktionen ohne eine Gruppierung nach eben diesen Werten keinen Sinn.

    aber ohne GROUP BY darf mans gar nicht tun und weiters
    ist auch unklar warum das dann überhaupt geht weil mysql
    keine angabe erhält was zu gruppieren ist.

    Um alles. Es wird ja auch in erster Linie _aggregiert_, nicht _gruppiert_.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo Rene

    mysql hat aggregate functions.

    Nicht nur MySQL, die gibt es in jedem mir bekannten SQL-Dialekt.

    unter anderem  sum() und count() und max() und min()

    die darf man nur mit GROUP BY verwenden.

    wo steht das?

    Du hast da etwas missverstanden. Wenn weitere Spalten ausgewählt werden,
    so müssen diese _entweder_ ebenfalls eine Aggregatfunktion enthalten _oder_ in der GROUP-BY-Klausel auftreten. Die GROUP-BY-Klausel ist jedoch keinesfalls obligatorisch.

    Zudem läßt ausgerechnet MySQL es zu, dass auch Spalten ausgewählt werden, die nicht in der GROUP-BY-Klausel auftreten (was meiner Meinung nach nicht besonders sinnvoll ist).

    mysql> SELECT COUNT(*) FROM kinder WHERE vorname LIKE '%a%' GROUP BY id;

    die enthalten ein "a" :-)

    ohne GROUP BY gibt mysql 8 aus,

    So macht man das auch.

    Freundliche Grüße

    Vinzenz