SQL Row明智的总值

时间:2017-10-14 03:32:09

标签: mysql sql row

我有一个名为calcu

的表格
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

我需要row wise total value。我的意思是新列total,它将是(s1 + s2 + s3 + s4),即(7 + 4 + 8 + 9)= 28 where id=1,(12 + 15 + 17 + 19) = 63 where id=2,(28 + 13 + 19 + 10)= 70 where id=3

结果如下:

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

结果总共161行和3行变为1行。

如何编写SQL查询?

3 个答案:

答案 0 :(得分:1)

SUM()函数是一个聚合函数。与其他聚合一样,仅将其用于计算多行的值。

您希望在一行中添加值,因此只需使用+运算符(括号是可选的)。

至于找到行中的最小值,使用CASE WHEN进行3次测试,比较S1,S2,S3和S4。

这应该有效:

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

答案 1 :(得分: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

我尝试简化查询。所以你正在寻找s1,s2,s3和s4中的最小值。你可以用最少的功能来实现。而且你需要总共所有四个'列'。只需添加它们

答案 2 :(得分:0)

SELECT *,s1 + s2 + s3 + s4为Total FROM FOR /D %%G in ( "C:\*" ) DO ( IF /I %%G NEQ C:\Windows ( echo %%G | FINDSTR /I /R ".*program.files.*" > NUL IF ERRORLEVEL 1 echo do something with %%G ) )