Sven Rautenberg: MYSQL select DISTINCT über mehrere Spalten

Beitrag lesen

Moin!

Was hälst du von "GROUP BY"?

wenn ich GROUP BY richtig verstehe, dann ist das doch eine art sortierung.

Nein. Sortieren tut ORDER BY. GROUP BY gruppiert, fasst nach flexiblen Gesichtspunkten doppelte Zeilen zusammen.

DISTINCT hingegen ist total unflexibel und eliminiert nur identische doppelte Zeilen aus dem Ergebnis. Die beiden Anweisungen scheinen das gleiche zu tun - tun es aber nicht.

Da deine Anforderungen jetzt aber klar sind:
SELECT DISTINCT monat, jahr FROM...
sollte genau das tun, was du willst. DISTINCT bezieht sich nicht auf eine bestimmte Spalte (so nach dem Motto "DISTINCT spalte, Nicht-DISTINCT andere-spalte"), sondern auf die Art des SELECT ("SELECT DISTINCT" im Gegensatz zu "SELECT ALL", was Standard ist).

Wenn du mit "SELECT monat, jahr" Zeilen erhälst, die doppelt vorkommen, wird dir "SELECT DISTINCT monat, jahr" diese Dopplungen eliminieren.

Das funktioniert aber nur solange, wie du wirklich nur Monat und Jahr selektierst. Wenn du noch eine weitere Spalte selektierst, die beispielsweise eine Beschreibung enthält, und bei gleichem Monat und Jahr je einen unterschiedlichen Eintrag enthält, wird DISTINCT keine Dopplung erkennen (die Beschreibung ist unterschiedlich). Da würde dann GROUP BY weiterhelfen können - allerdings müßtest du dann definieren, welche der zwei (oder mehr) möglichen Beschreibungen du als Ergebnis haben willst.

GROUP BY habe ich bisher noch  nicht verwendet - stehe also etwas auf dem schlauch

GROUP BY ist ein sehr wichtiges Mittel in SQL, dass einem viele Dinge vereinfachen kann. Du solltest dich mal damit beschäftigen.

Dein Monat/Jahr-Problem ließe sich damit ebenfalls lösen:
SELECT monat, jahr FROM tabelle GROUP BY monat, jahr

Allerdings ist dieser Anwendungsfall blöd, weil eigentlich noch mindestens eine weitere Spalte selektiert werden sollte, damit die Gruppierung Sinn macht - weil DISTINCT ansonsten sinnvoller ist.

- Sven Rautenberg

--
Among the maxims on Lord Naoshige's wall, there was this one: "Matters of great concern should be treated lightly."
Master Ittei commented, "Matters of small concern should be treated seriously."
(Hagakure: The Way of the Samurai)