SQL Problem

Loopo

Admiral
Registriert
Juli 2002
Beiträge
7.617
Ich habe eine Tabelle, die hat vereinfacht 2 Spalten. In der 2. Spalte stehen Zahlen. Ich möchte nun gruppiert nach der 1. Spalte den prozentuellen Anteil ausgeben.

Die Summe kann ich einfach berechnen mit: SELECT SUM(Spalte2) FROM tabelle;
Das Ergebnis könnte ich nun einfach in einer 2. Abfrage erhalten mit: SELECT (Spalte2*100/Summe) FROM tabelle GROUP BY Spalte1;

Allerdings muss die komplette Abfrage in einem einzigen SQL-Befehl stehen, und das bekomme ich leider nicht auf die Reihe.
 
Zuletzt bearbeitet:
Ich weis zwar nicht genau was du meinst, aber warum geht folgendes nicht:
Code:
SELECT (Spalte1*100/(
  SELECT SUM(Spalte2) FROM tabelle
  )
) 
FROM tabelle 
GROUP BY Spalte1;
 
Weil dann bekomm ich die Meldung:

Not in aggregate function or group by clause ...

Da fehlt dann wohl irgendwie die Zuordnung.
 
Welche MySQL Version hast du? Bei mir wird das Query als korrekt ausgeführt.

Code:
mysql> describe test123;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| feld1 | varchar(22) | NO   |     |         |       |
| feld2 | int(22)     | NO   |     |         |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> SELECT (
    -> Feld1 *100 / (
    -> SELECT SUM( Feld2 )
    -> FROM test123 )
    -> )
    -> FROM test123
    -> GROUP BY Feld1;
+-------------------------------------------------------+
| (
Feld1 *100 / (
SELECT SUM( Feld2 )
FROM test123 )
) |
+-------------------------------------------------------+
|                                      33.3333333333333 |
|                                      66.6666666666667 |
+-------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> select * from test123;
+-------+-------+
| feld1 | feld2 |
+-------+-------+
| 10    |    10 |
| 20    |    20 |
+-------+-------+
2 rows in set (0.00 sec)
 
Ich verwende HSQLDB in Java.

Ich konnte das Problem mit folgender Abfrage jetzt lösen:
SELECT Spalte1, SUM(anteil) FROM (SELECT Spalte1, (Spalte2*100/SELECT SUM(Spalte2) FROM tabelle) AS anteil FROM tabelle) GROUP BY Spalte1;

Also zuerst wird eine Tabelle mit Spalte1 und anteil erzeugt und aus der wird dann durch Gruppieren und aufsummieren das Endergebnis produziert.
 
Zurück
Oben