2009-05-21 7 views
0

Ich habe eine Tabelle, die wie folgt aussieht:Führen Sie Summe, Durchschnitt und Multiplikation über alle Spalten in einer Tabelle aus?

id test1 test2 test3 test4 ... test200 
1  90  87  85  86  70 
2  100  95  83  92  80 
. 
. 
18000 

Ich weiß, es gibt Standardoperationen Summen und Mittel auf einer einzigen Spalte ausführen und den Wert von zwei Spalten miteinander zu multiplizieren, aber ist es möglich, sie über alles zu tun, Spalten in einer Reihe mit einer bestimmten ID? Wenn es nicht klar ist, möchte ich etwas wie this über Zeilen anstatt über Spalten tun. Dank

+1

Check out Vincent Ramdhanie Antwort - ich habe wie diese Kreuztabellen- Tabellen gesehen - sie sind eine echte Schmerzen auf Berechnungen zu tun. – Knobloch

Antwort

6

Sie können die Tabelle möglicherweise so umgestalten, dass sie nicht über 200 Spalten verfügt.

z.B.

Id testnum score 
1 1  90 
1 2  87 
... 
2 1  100 
2 2  95 
... 
180000 

Jetzt können Sie eine Abfrage wie folgt tun:

select sum(score) as totalscore 
from mynewtable 
where id=1 
+0

+1 - Ich würde empfehlen, keine Kreuztabellen zu erstellen – Knobloch

+0

Okay, ich denke, das wird wahrscheinlich das Beste sein. Ich habe versucht, einen Weg zu finden, den Tisch neu zu gestalten und das sollte es wahrscheinlich tun. Vielen Dank! –

+0

Gibt es auch eine einfache Möglichkeit, dies zu tun? Die Tabelle, die ich erstellte, war eine importierte CSV ... –

2

Wie wäre:

select id, sum(test1 + test2 + ...) as summation 
group by id 

Ist das Problem, dass Sie so viele Spalten haben? Diese Lösung behandelt nicht viele Spalten reibungslos.

+1

Die Summe sollte funktionieren, aber wahrscheinlich sollte er diese Tabelle normalisieren. Dies wird schmerzhaft sein, wenn er jedes Mal, wenn er einen Test hinzufügt, eine Spalte hinzufügen muss. –

+0

Guter Punktehogue. Habe nicht erkannt, dass die Spalten für Testdaten sind. –

0

Es könnte etwas verzerrtes SQL geben, um den Inhalt der ganzen Zeile zu bearbeiten (ich bezweifle das), aber Sie müssen immer noch die Spaltennamen angeben, sonst würden Sie die ID-Nummern in die Berechnung einbeziehen.

Verwandte Themen