Yadgar: Prozentwerte aus gruppierten Werten errechnen

Beitrag lesen

High!

Wenn Subqueries unterstütztwerden, kannst du z.b./evt. sowas machen

SELECT Marke,
       COUNT(*) AS CountByMarke,
       (SELECT COUNT(*) FROM Orgeln) AS TotalCount,
       (CountByMarke / TotalCount) AS Anteil
   FROM Orgeln
   GROUPY BY Marke

Subqueries werden unterstützt, also versuchte ich es mal mit

select marken.Markenname, count(orgeln.Modell) as Anzahl_Modelle, (count(orgeln.Modell)/(select count(*) from orgeln))*100 as Prozentanteil from orgeln, marken where orgeln.Marke=marken.Nr group by Markenname;

dabei kamen allerdings merkwürdige Prozentwerte raus, nämlich:

+-----------------+----------------+---------------+
| Markenname      | Anzahl_Modelle | Prozentanteil |
+-----------------+----------------+---------------+
| Ahlborn         |              3 |       10.3448 |
| Allen           |              2 |        6.8966 |
| Baldwin         |              2 |        6.8966 |
| Baleani         |              2 |        6.8966 |
| Belton          |              2 |        6.8966 |
| Bontempi        |              1 |        3.4483 |
| Compton         |              1 |        3.4483 |
| Conn            |              3 |       10.3448 |
| CRB elettronica |              1 |        3.4483 |
| Crumar          |              3 |       10.3448 |
+-----------------+----------------+---------------+

...offenkundig Unsinn, da die Gesamtzahl der Orgeln 20 ist, sich also glatte Fünferzahlen ergeben müssten! Immerhin passen die Zahlen proportional zueinander, so dass der Fehler entweder beim Divisor oder dem Dividenden liegen muss...

In Stored Procedures könntest du hingegen zuerst eine Variable setzen mit dem Totalcount und dann in der eigentlichen Abfrage wiederwenden?

Kann MySQL eigentlich auch mit ganzen Batches umgehen, also quasi ...

DECLARE @var1 int;
SELECT @var1 = COUNT(*) FROM Orgeln;
SELECT Marke,
       COUNT(*) AS CountByMarke,
       @var1,
       (CountByMarke / @var1) AS Anteil
   FROM Orgeln
   GROUPY BY Marke;

... in einem Aufruf?

Batches funktionieren! Allerdings soll das Ganze irgendwann einmal webgängig mit einer noch zu programmierenden PHP/HTML-Benutzeroberfläche funktionieren...

Das Bedürfnis nach "Eleganz" muss man manchmal je nach Unterstützung durch die Software etwas hin anstellen. Ausserdem kommt es imho bei Softwareentwicklung nicht wirklich auf Eleganz an, beim Ballett schon eher. :)

Wie gesagt, für den MySQL-unerfahrenen Endbenutzer wäre es nicht so praktisch, wenn er vor der eigentlichen Ergebnistabelle noch ein Hilfstabellchen mit dem Summenwert zu sehen bekäme - so etwas irritiert doch!

Bis bald im Khyberspace!

Yadgar

P.S. Gibt es eigentlich hier eigentlich eine Möglichkeit, Text in Blockschrift zu formatieren? Wäre praktisch, da ich MySQL gegenwärtig auf der Linux-Konsole fahre...