2017-10-14 2 views
1

Ich habe eine Tabelle namens calcuSQL Row weise Gesamtwert

id date   name s1  s2 s3 s4 min_value 
1 02/10/2017 dicky 7  4  8  9  4   
2 02/10/2017 acton 12  15 17 19  15   
3 02/10/2017 adney 28  13 19 10  13   

This is my table in SQL Fiddle

I row wise total value brauchen. I bedeutet in einer neuen Spalte total wird es (s1 + s2 + s3 + s4) dh (7 + 4 + 8 + 9) = 28 where id=1, (12 + 15 + 17 + 19) = 63 where id=2, (28 + 13 + 19 + 10) = 70 where id=3.

Ergebnis wird wie unten sein:

id date   name s1  s2 s3 s4 min_value Total 
1 02/10/2017 dicky 7  4  8  9  4   28 
2 02/10/2017 acton 12  15 17 19  15  63 
3 02/10/2017 adney 28  13 19 10  13  70 

see my problem here

Es führt alle insgesamt 161 und 3 Zeilen 1 Zeile werden.

Wie schreibe ich SQL-Abfrage?

+0

Hinweis: 's1 + s2 + s3 + d4'. –

Antwort

1

Die Funktion SUM() ist eine Aggregatfunktion. Wie bei anderen Aggregaten verwenden Sie sie nur, um Werte über mehrere Zeilen hinweg zu berechnen.

Sie möchten Werte in einer Zeile addieren, verwenden Sie also einfach den Operator + (Klammern sind optional).

Um den Minimalwert in der Zeile zu finden, verwenden Sie CASE WHEN mit 3 Tests und vergleichen Sie S1, S2, S3 und S4.

sollte diese Arbeit:

select 
    c.id, c.date, c.name, c.s1, c.s2, c.s3, c.s4, 
    (c.s1 + c.s2 + c.s3 + c.s4) as total, 
    case 
    when c.s1 <= c.s2 and c.s1 <= c.s3 and c.s1 <= c.s4 then c.s1 
    when c.s2 <= c.s1 and c.s2 <= c.s3 and c.s2 <= c.s4 then c.s2 
    when c.s3 <= c.s2 and c.s3 <= c.s1 and c.s3 <= c.s4 then c.s3 
    when c.s4 <= c.s2 and c.s4 <= c.s3 and c.s4 <= c.s1 then c.s4 
    end as min_value 
from calcu c 
; 

SQLFiddle Siehe

+0

Wenn Sie Ihre Antwort in SQL Fiddle sorgfältig überprüfen, wurde die Spalte "min_value" geändert. Dies ist die niedrigste Spalte, dh nach dem Summieren aller Felder spaltenweise, wie s1 Summe = 47, s2 Summe = 32, s3 Summe = 44, s4 sum = 38 –

+0

So wollen Sie etwas wie folgt: http://sqlfiddle.com/#!9/31579c/36 – Serge

0
select c.id, 
     c.date, c.name, c.s1, c.s2, c.s3, c.s4, 
     least(s1,s2,s3,s4) Minvalue, 
     (s1+s2+s3+s4) Total 
from calcu c 

Ich habe versucht, die Abfrage zu vereinfachen. Sie suchen also nach dem Mindestwert zwischen s1, s2, s3 und s4. Sie können mit der geringsten Funktion erreichen. Und Sie brauchen insgesamt alle vier Spalten. Fügen Sie einfach sie

0

SELECT *, s1 + s2 + s3 + s4 als Summe aus calcu

+0

Code nur Antworten sind nicht nützlich für die Gemeinschaft. Bitte schauen Sie auf [Wie zu antworten] (http://stackoverflow.com/questions/how-to-answer) – abpatil