Volker Nebelung: GROUP BY mit String-Vergleich

Aloha 'oe,

ich habe folgendes Problem mit einer MySQL-Abfrage:
In einer Tabelle habe ich eine Spalte 'datei' mit folgenden Beispielwerten:
123456.789
123456.888
123456.906
765432.111
765432.765
567892.098
567892.654
usw.

Nun will ich darüber eine Abfrage laufen lassen, die mir das gleiche liefert wie
SELECT * FROM tabelle GROUP BY 'den ersten sechs Buchstaben von datei'

Wie kann ich diese Anfrage formulieren? Ich bin momentan recht ansatzlos ...
Danke im Voraus.

Gruß, Volker

--
„I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies."
- Tony Hoare
  1. Hallo Volker,

    In einer Tabelle habe ich eine Spalte 'datei' mit folgenden Beispielwerten:
    123456.789
    123456.888
    usw.

    Nun will ich darüber eine Abfrage laufen lassen, die mir das gleiche liefert wie
    SELECT * FROM tabelle GROUP BY 'den ersten sechs Buchstaben von datei'

    MySQL kennt die Zeichenkettenfunktion LEFT().

    Freundliche Grüße

    Vinzenz

    1. MySQL kennt die Zeichenkettenfunktion LEFT().

      Und ich brech mir hier einen ab mit dem Versuch, LIKE passend einzusetzen ...
      Warum einfach, wenn es auch kompliziert geht ... ;-)
      Passt - danke.

      Gruß, Volker

      --
      „I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies."
      - Tony Hoare
  2. Hi Volker,

    Nun will ich darüber eine Abfrage laufen lassen, die mir das gleiche liefert wie
    SELECT * FROM tabelle GROUP BY 'den ersten sechs Buchstaben von datei'

    Wenn du alles Anzeigen willst, was willst du dann GROUPieren? Das ist technisch sinnfrei zusammen mit der Verwendung von * (bei * sowieso).

    Es würde quasi erst Sinn, wenn du weitere Aggregatsfunktionen wie Count() verwendest, à la

    SELECT LEFT(datei, 6) AS feldA, COUNT(*)
      FROM tabelle
      GROUP BY LEFT(datei, 6)

    denn da willst du ja gruppiert zählen, wie oft welche eindeutige Zusammensetzung von 6 Zeichen in der Tabelle vorkommt.

    Dass MySql solche eine Abfrage mit * und GROUP BY unterstützt/erlaubt, ist ein Fehlverhalten. Versuche dich bitte davon zu lösen. Was du "abfragen" möchtest, kann man 100pro auch auf andere Varianten lösen.

    Ciao, Frank

    1. Dass MySql solche eine Abfrage mit * und GROUP BY unterstützt/erlaubt, ist ein Fehlverhalten. Versuche dich bitte davon zu lösen. Was du "abfragen" möchtest, kann man 100pro auch auf andere Varianten lösen.

      Das * habe ich nur der Einfachheit ins Beispiel geschrieben, es kam auf den Teil dahinter an, mit dem ich Probleme hatte.
      Von Sternchen bin ich sonst sowas von gelöst - wow :-).

      Gruß, Volker

      --
      „I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies."
      - Tony Hoare
      1. Hi,

        abgesehen vom Sternchen selbst, sollten unter den selektierten Spalten auch nur die stehen

        • die durch Aggregationsfunktionen verarbeitet werden (count, sum, max, avg)
        • die im Group By vorkommen

        Alle anderen haben dort semantisch nichts verloren. Jedes halbwegs vernünftige (nach Standards operierende) DBMS würde dir sonst einen Fehler liefern. :)

        Nur so der Vollständigkeit halber. :)

        Ciao, Frank