通过在sql中对total进行分组来计算最小值列

时间:2017-10-10 04:33:39

标签: mysql sql group-by sum min

我有一个名为calcu

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

如果我在一个日期中总计所有字段,那么结果将是

    2/10/2017           47      32      44      38

此处最小值为32。它表示最小值列为s2。这就是我分别在表s2 field value的{​​{1}}字段中输入min_value的原因。

我需要如何通过SQL查询完成min_value字段?

我正在使用MYSQL数据库。

Plz显示SQL查询和查询结果。

1 个答案:

答案 0 :(得分:0)

您希望首先找到具有最小总和的列,然后在查询中使用该列。因此,您需要一个子查询,您可以将每个总和与其他总和进行比较,并记住列名称。然后在主查询中使用该列名来检查要显示的值。

select 
  c.id, c.date, c.name, c.s1, c.s2, c.s3, c.s4, 
  case 
    when col.colname = 's1' then c.s1
    when col.colname = 's2' then c.s2
    when col.colname = 's3' then c.s3
    when col.colname = 's4' then c.s4
  end as min_value
from calcu c
cross join
(
  select
    case 
      when sum(s1) <= sum(s2) and sum(s1) <= sum(s3) and sum(s1) <= sum(s4) then 's1'
      when sum(s2) <= sum(s1) and sum(s2) <= sum(s3) and sum(s2) <= sum(s4) then 's2'
      when sum(s3) <= sum(s1) and sum(s3) <= sum(s2) and sum(s3) <= sum(s4) then 's3'
      else                                                                       's4'
    end as colname
  from calcu
) col;

改变后的SQL小提琴:http://sqlfiddle.com/#!9/31579c/3