Gruppierungs-Problem

Gruppierungs-Problem

am 24.11.2006 23:08:27 von Sebastian Suchanek

Hallo NG!

Bei folgendem Problemchen komme ich nicht so recht weiter: Und
zwar habe ich eine Tabelle in der jeder Datensatz u.a. ein
Datumsfeld sowie (über Joins) ein Feld mit einer
Kategoriebezeichung hat.
Was ich jetzt möchte, ist eine Abfrage(-Tabelle), welche die
Anzahl der jeweiligen Einträge gruppiert nach Datum *und*
Kategorie enthält. Also in etwa so:

Ausgangsdaten:

Datum Kategorie
--------------------
02.08.06 2
02.08.06 1
15.08.06 3
20.08.06 3
01.09.06 1
05.09.06 3
20.09.06 1
30.09.06 1
03.10.06 2
05.10.06 3
06.10.06 2
10.10.06 2
20.10.06 3
03.11.06 1
10.11.06 2
20.11.06 3
23.11.06 2

Und das gewünschte Ergebnis:

| Kat.1 Kat.2 Kat.3
----------+--------------------
Aug. '06 | 1 1 2
Sept. '06 | 3 0 1
Okt. '06 | 0 2 3
Nov. '06 | 1 2 1

Ein nach Monaten *oder* nach Kategorien gruppiertes Ergebnis
bekomme ich hin, das ist nicht das Thema.
Aber wie bekomme ich das halbwegs elegant kombiniert?


TIA,

Sebastian

--
http://www.baumaschinen-modelle.net
http://www.schwerlast-rhein-main.de

Re: Gruppierungs-Problem

am 25.11.2006 08:09:27 von Heiko Richler

Guten Morgen Sebastian,

> Und das gewünschte Ergebnis:
> Aber wie bekomme ich das halbwegs elegant kombiniert?


Pivot-Tabelle ist hier das Stichwort. Habe in MySQL so was vor längerer
Zeit schon vermisst. Eventuell ist es bei neueren Versionen nun enthalten.

So eine Matrix erstellst Du auch einfach selber.
- Select für Kategorien KatID, Name GROUB BY ... ORDER BY ...
(Statt GROUB BY sollte auch DISTINCT funktionieren, da solltest Du
mal nachlesen was mit ORDER BY besser ist)
- Select der Daten gruppiert nach Kategorie ID, Monat und Jahr
ORDER BY Year(x), Month(x), KatID

Durch eine geschickte Sortierung der Abfrage kannst Du die Zellen der
Matrix leichter befüllen. Die Zeilen sind in HTML die äußere Struktur
also solltest Du auch zuerst nach deren Werten sortieren.

Jetzt musst Du nur Leerstellen und den Zeilenwechsel erkennen.

Wenn Du statt dem Datum einen Fremdschlüssel hast, kannst Du auch dazu
eine vorbereitende Abfrage machen.

Gruß

Heiko
--
http://www.richler.de/
http://www.richler.info/

Re: Gruppierungs-Problem

am 25.11.2006 08:26:16 von Weinzierl Stefan

Sebastian Suchanek wrote:
> Hallo NG!
>
> Bei folgendem Problemchen komme ich nicht so recht weiter: Und
> zwar habe ich eine Tabelle in der jeder Datensatz u.a. ein
> Datumsfeld sowie (über Joins) ein Feld mit einer
> Kategoriebezeichung hat.
> Was ich jetzt möchte, ist eine Abfrage(-Tabelle), welche die
> Anzahl der jeweiligen Einträge gruppiert nach Datum *und*
> Kategorie enthält. Also in etwa so:
>
> Ausgangsdaten:
>
> Datum Kategorie
> --------------------
> 02.08.06 2
> 02.08.06 1
> 15.08.06 3
> 20.08.06 3
> 01.09.06 1
> 05.09.06 3
> 20.09.06 1
> 30.09.06 1
> 03.10.06 2
> 05.10.06 3
> 06.10.06 2
> 10.10.06 2
> 20.10.06 3
> 03.11.06 1
> 10.11.06 2
> 20.11.06 3
> 23.11.06 2
>
> Und das gewünschte Ergebnis:
>
> | Kat.1 Kat.2 Kat.3
> ----------+--------------------
> Aug. '06 | 1 1 2
> Sept. '06 | 3 0 1
> Okt. '06 | 0 2 3
> Nov. '06 | 1 2 1
>
> Ein nach Monaten *oder* nach Kategorien gruppiertes Ergebnis
> bekomme ich hin, das ist nicht das Thema.
> Aber wie bekomme ich das halbwegs elegant kombiniert?

SELECT Datum, Kategorie,COUNT(*) FROM Tabelle GROUP BY Datum, Kategorie

Der Rest ist Anwendungssache...

Stefan

Re: Gruppierungs-Problem

am 25.11.2006 08:55:39 von steinboeck

Sebastian Suchanek schrieb:

> Ausgangsdaten:
>=20
> Datum Kategorie
> --------------------
> 02.08.06 2
> 02.08.06 1
> 15.08.06 3

> Und das gewünschte Ergebnis:
>=20
> | Kat.1 Kat.2 Kat.3
> ----------+--------------------
> Aug. '06 | 1 1 2
> Sept. '06 | 3 0 1

Über die Pivotisierung gibt es auf der mysql HP einen netten Artikel.=20
Prinzipiell brauchst du ein Statement wie
SELECT datum,
sum(if(kategorie=3D1,1,0)) as kat1,
sum(if(kategorie=3D2,1,0)) as kat2,
..
from ...
group by datum

Das Statement kannst mit Php bauen, oder auch mittels temporärer=20
Tabellen im Mysql, oder natürlich zu Fuß

Michael

Re: Gruppierungs-Problem

am 25.11.2006 08:58:03 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Gruppierungs-Problem

am 25.11.2006 23:04:45 von Werner Bauer

Andreas Kretschmer schrieb:
> Ich hoffe für Dich, das MySQL CASE kann, denn ich hab das mit Postgre=
SQL
> gemacht.

Sag mal, Andreas, du bist doch nicht doof, wieso nervst du die Leut mit=20
dem Postgres-glumpert?

Da schreibt man schon, mit Kretschmer im Killfile liest sich die NG=20
wieder ordentlich ... und du, du kennst ja alle mysql-Befehle, und=20
schreibst sie ABSICHTLICH nicht hin? Warum ist dir soooo fad?


Werner

Re: Gruppierungs-Problem

am 26.11.2006 10:33:59 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Gruppierungs-Problem

am 26.11.2006 11:00:19 von Johannes Vogel

Hi Andreas

Andreas Kretschmer wrote:
> Anstatt Deinem Gesülze wäre ich z.B. eher an einer Aussage interessiert,
> ob CASE mit MySQL funktioniert.

Ja, tut's natürlich. :-)
Wobei solche Lösungen auch früher schon in dieser NG auch von
MySQL-Usern empfohlen wurde. Dadurch hättest du schliessen können, dass
das auch unter MySQL funktioniert. Und das Unwahrscheinlichste aller
Dinge: Es existiert ein (IMHO sogar sehr brauchbares) Online-Handbuch
für MySQL!

| CASE was added in MySQL 3.23.3.

12.2. Control Flow Functions
http://dev.mysql.com/doc/refman/4.1/en/control-flow-function s.html

Johannes

Re: Gruppierungs-Problem

am 26.11.2006 11:09:23 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Gruppierungs-Problem

am 26.11.2006 11:28:43 von Johannes Vogel

Hi Andreas

Andreas Kretschmer wrote:
> begin Johannes Vogel wrote:
>> Wobei solche Lösungen auch früher schon in dieser NG auch von
>> MySQL-Usern empfohlen wurde. Dadurch hättest du schliessen können, dass
> Argh. Mit dieser Argumentation sind alle Antworten auf die Frage des OP
> schlecht. Als ich das schrieb, waren bereits 1 oder 2 Antworten für mich
> sichtbar, die aber auf 'mach das in der Applikation' hinausliefen. Ich
> denke, wenn man es durch ein SQL hinbekommt, ist es besser und passender
> in einer NG wie dieser. Egal, ob es schon mal viel früher empfohlen
> wurde oder nicht.

Nein, ich meinte, dass du deshalb hättest wissen können, dass CASE in
MySQL tut. Aber so wichtig ist das alles nicht...

Ich verstehe nicht, weshalb du nicht einfach mal eine MySQL auf einer
Maschine vornimmst und da ein bisschen rumspielst damit.

Grüess, Johannes

Re: Gruppierungs-Problem

am 26.11.2006 13:07:06 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Gruppierungs-Problem

am 26.11.2006 13:15:13 von Johannes Vogel

Hi Andy

Andreas Kretschmer wrote:
> begin Johannes Vogel wrote:
>> Ich verstehe nicht, weshalb du nicht einfach mal eine MySQL auf einer
>> Maschine vornimmst und da ein bisschen rumspielst damit.
> Mal ehrlich: wozu sollte das gut sein, wenn man PostgreSQL hat?

Wie nennt man sowas? Skill-Steigerung?

Kommt natürlich ein bisschen drauf an, was du den ganzen Tag so machst -
ausser hier in den NGs rumhängen. Womit verdienst du denn eigentlich
deine Brötchen?

Johannes

Re: Gruppierungs-Problem

am 26.11.2006 13:40:29 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Gruppierungs-Problem

am 26.11.2006 15:31:28 von Johannes Vogel

Hi Andreas

Andreas Kretschmer wrote:
> begin Johannes Vogel wrote:
>> ausser hier in den NGs rumhängen. Womit verdienst du denn eigentlich
>> deine Brötchen?
> Mit Arbeit. Und Du?

Mit rumeggen. :-]

Johannes

Re: Gruppierungs-Problem

am 26.11.2006 15:42:32 von Werner Bauer

Andreas Kretschmer schrieb:

> Du irrst. Ich habe kein MySQL und ich kenne die Befehle und Eigenheiten=

> nicht.=20

Andreas, ich glaub du lügst.

Selbst einer mit einem IQ unter 50 hätte bei einer derart intensiven=20
Beschäftigung mit Mysql das schon gelernt. Jaaa, Andreas, du BIST in de=
r=20
Mysql-NG, also ... auch jemand mit einem ausgesprochen=20
unterdurchschnittlichen IQ hätte inzwischen ALLE aber auch wirklch ALLE=
=20
Mysql Eigenheiten erlernt, wenn er hier so oft rumhängt wie du.

Solltest du vielleicht auch, eine DB mit derart breitem=20
Anwendungsspektrum sollte man wirklich beherrschen ... oder?

Werner.