GROUP BY mit Ausnahmen, geht das?

GROUP BY mit Ausnahmen, geht das?

am 14.03.2006 18:11:17 von Thomas Schultz

Hallo,

ich habe folgendes Problem. Ich moechte eine SELECT Anweisung zum
zaehlen von Downloads nach Laendern gruppieren. Die Laender liegen als
COUNTRYID vor (also 49 fuer Deutschland, 41 fuer Schweiz, etc.), in
etwa so:

DOWNLOADS | COUNTRYID
-------------------------------------------
20 49
34 49
3 41
64 49
12 33
18 39
6 49
usw.

Es koennen alle Laender vorkommen. Ich moechte eine Liste der Downloads
pro Land ausgeben, was recht einfach geht mit

SELECT SUM(DOWNLADS),COUNTRYID GROUP BY COUNTRYID

Jetzt kommt aber die Ausnahme: Alle Downloads aus der Schweiz und
Deutschland sollen zusammengezaehlt gelten und unter Deutschland
aufgefuehrt werden. Alle anderen Laender sollen normal behandelt
werden.

Wie mache ich das am besten in MySQL?

Vielen Dank fuer eure Tipps,

Gabriel

Re: GROUP BY mit Ausnahmen, geht das?

am 14.03.2006 18:24:04 von Sven Paulus

Escadamausgaby@gmail.com wrote:
> SELECT SUM(DOWNLADS),COUNTRYID GROUP BY COUNTRYID
> Jetzt kommt aber die Ausnahme: Alle Downloads aus der Schweiz und
> Deutschland sollen zusammengezaehlt gelten und unter Deutschland
> aufgefuehrt werden. Alle anderen Laender sollen normal behandelt
> werden.

SELECT SUM(downloads),countryid GROUP BY
IF(countryid=49 OR countryid=41,49,countryid)

Re: GROUP BY mit Ausnahmen, geht das?

am 14.03.2006 18:29:01 von Thomas Schultz

Sven Paulus wrote:
> Escadamausgaby@gmail.com wrote:
> > SELECT SUM(DOWNLADS),COUNTRYID GROUP BY COUNTRYID
> > Jetzt kommt aber die Ausnahme: Alle Downloads aus der Schweiz und
> > Deutschland sollen zusammengezaehlt gelten und unter Deutschland
> > aufgefuehrt werden. Alle anderen Laender sollen normal behandelt
> > werden.
>
> SELECT SUM(downloads),countryid GROUP BY
> IF(countryid=49 OR countryid=41,49,countryid)

Hallo Sven,

herzlichen Dank! Funktioniert. Da waere ich nie drauf gekommen, dass
man nach GROUP BY noch solche Ausdruecke verwenden darf.

Gruss,
Gabriel

Re: GROUP BY mit Ausnahmen, geht das?

am 14.03.2006 18:31:50 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: GROUP BY mit Ausnahmen, geht das?

am 15.03.2006 09:09:02 von Sven Paulus

Escadamausgaby@gmail.com wrote:
>> SELECT SUM(downloads),countryid GROUP BY
>> IF(countryid=49 OR countryid=41,49,countryid)
> herzlichen Dank! Funktioniert. Da waere ich nie drauf gekommen, dass
> man nach GROUP BY noch solche Ausdruecke verwenden darf.

Ist aber dooferweise falsch: Es gruppiert nur die verschiedenen
Laendercodes gemeinsam zusammen, was Dir aber in der entsprechenden
Zeile als countryid zurueckgegeben wird, ist willkuerlich, das kann
41 oder 49 sein, je nachdem was MySQL "zuerst erwischt".

Korrekt muss es so lauten:

SELECT SUM(downloads),
IF(countryid=49 OR countryid=41,49,countryid) mycountryid
FROM blubber
GROUP BY mycountryid

Dann passt's auch nicht nur mit der Zusammenfassung, sondern es wird
auch der korrekte Country-Code ausgegeben. Sorry, stand da gestern
ein wenig auf dem Schlauch ...

Re: GROUP BY mit Ausnahmen, geht das?

am 20.03.2006 22:56:56 von Dominik Echterbruch

Andreas Kretschmer wrote:
>
>>SELECT SUM(DOWNLADS),COUNTRYID GROUP BY COUNTRYID
>
>>Jetzt kommt aber die Ausnahme: Alle Downloads aus der Schweiz und
>>Deutschland sollen zusammengezaehlt gelten und unter Deutschland
>>aufgefuehrt werden. Alle anderen Laender sollen normal behandelt
>>werden.
>
>>Wie mache ich das am besten in MySQL?
>
> Schau mal, ob man bei MySQL schon CASE implementiert hat.

Hat man, mein Lieber, hat man :) Sogar schon in der recht angestaubten
Version 3.23.x.

Grüße,
Dominik