我有一个名为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查询和查询结果。
答案 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