Kleines optisches Problem bei Gesammtsumme (MariaDB)

Schnurze

Benutzer
Beiträge
16
Hi,
mit folgender Tabelle:

Code:
CREATE TABLE `test` (
   `ID` INT(11) NOT NULL AUTO_INCREMENT,
   `Vorname` VARCHAR(50) NOT NULL DEFAULT '0',
   `Nachname` VARCHAR(50) NOT NULL DEFAULT '0',
   `Zähler` VARCHAR(50) NOT NULL DEFAULT '0',
   PRIMARY KEY (`ID`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3
;

und folgenden Daten:


ID
Vorname Nachname Zähler
1 Andreas Maier 12
2 Elisbeth Buschmann 42
3 Kim Maier 5
4 Ernst Zorn 10
5 Maja Maier 1
6 Matthias Kurtz 25
7 Carola Maier 2
8 Elli Kurtz 3

führe ich folgende Abfrage durch:
Code:
select
ifnull (Nachname,'Summe') as Name,
Zähler,
SUM(cast(Zähler as decimal(5,0))) as Betrag from test
group by Nachname with rollup

und erhalte wunschgemäß folgendes Ergebnis mit Teil- und Gesammtsumme:


Name
Zähler Betrag
Buschmann 42 42
Kurtz 25 28
Maier 12 20
Zorn 10 10
Summe 10 100

http://www.heidisql.com/
Jetzt stört mich nur noch der Zähler '12' in der (Gesammt-)Summen Zeile. Wie kann ich den auf "" setzen? Hab schon alles mögliche ausprobiert und bin nun ratlos.
Irgendwelche Ideen?
 
Werbung:
Ok in der Summenzeile steht eine 10 in der Zählerspalte - Asche auf mein Haupt.
Ein syntaktisch falsches Select (welches das richtige Ergebnis liefert) ist ja ganz nett, hilft mir aber auch nicht wirklich weiter.
Das eine Zahl kein VARCHAR sein sollte und keine Umlaute in den Spaltenüberschriften enthalten sein sollten ist mir auch klar.
Das ist aber genau so bei der Originaltabelle, die ich leider nicht so ohne weiteres abändern kann.
 
Das Problem ist, daß z.B. Zähler für Maier 12, 5, 1 oder 2 sein kann, welches soll im Resultat erscheinen? Deine Abfrage ist logisch falsch und alle Datenbanken außer MySQL und MySQL in aktuellen Versionen erkennen das als Fehler. Dein MySQL liefert einen zufälligen Wert. Das ist nicht im Sinne der Theorie von Datenbanken.
 
Code:
select
   ifnull (Nachname,'Summe') as Name,
   MAX(cast(Zähler as decimal(5,0))) as Zahl,
   SUM(cast(Zähler as decimal(5,0))) as Betrag
from
   test
group by
   Nachname with rollup

liefert:


Name
Zahl Betrag
Buschmann 42 42
Kurtz 25 28
Maier 12 20
Zorn 10 10
Summe 42 100

also alles definiert, was aber natürlich überhaupt nichts am Problem ändert.....
 
Code:
test=*# select * from schnurze;
 nachname  | zaehler
-----------+---------
 maier     |      12
 buschmann |      42
 maier     |       5
 zorn      |      10
 maier     |       1
 kurtz     |      25
 maier     |       2
 kurtz     |       3
(8 rows)

test=*# select coalesce(nachname,'Summe') as nachname, case when nachname is null then null else  max(zaehler) end as max_zaehler, sum(zaehler) summe from schnurze group by rollup (nachname) order by max_zaehler;
 nachname  | max_zaehler | summe
-----------+-------------+-------
 zorn      |          10 |    10
 maier     |          12 |    20
 kurtz     |          25 |    28
 buschmann |          42 |    42
 Summe     |             |   100
(5 rows)

test=*#
 
Werbung:
Zurück
Oben