GROUP BY und Du

Mit GROUP BY kann man aggregierte Ergebnisse von SELECT queries schön verteilen/auffangen.

Die folgende query holt alle status aus der Datenbank, und zeigt nicht tumb alle untereinander, sondern lediglich jeden einmal.

  SELECT status,count(*) FROM versand_bestellungen WHERE 1 GROUP BY status

ist synonym zu

  SELECT DISTINCT status,count(*) FROM versand_bestellungen WHERE 1

Group by Feinheiten

Group by hat dennoch einiges an Verwirrungspotential. Oder ist es SUM()?

  SELECT
    versand_bestellungen.bestellnr,
    versand_artikel.bezeichnung,
    versand_bestellungen.status,
    SUM(versand_bestellungen.menge * versand_artikel.preis) AS umsatz
  FROM
    versand_bestellungen
  LEFT JOIN
    versand_artikel
      ON versand_bestellungen.artikelnr = versand_artikel.artikelnr WHERE 1

funktioniert anders als

  SELECT
    versand_bestellungen.bestellnr,
    versand_artikel.bezeichnung,
    versand_bestellungen.status,
    SUM(versand_bestellungen.menge * versand_artikel.preis) AS umsatz
  FROM
    versand_bestellungen
  LEFT JOIN
    versand_artikel
      ON versand_bestellungen.artikelnr = versand_artikel.artikelnr WHERE 1
  GROUP BY versand_bestellungen.bestellnr

mysql Workshop Übersicht