简体   繁体   English

查找最小值列和最小值列名称

[英]Find minimum value column and minimum value column name

I have a table named formal :我有一个名为formal的表:

id date         name     d1    d2     d3     d4
1  20/10/2017   bimal    6     7      8      9
2  20/10/2017   kumar    13    10     11     12
3  20/10/2017   aman     16    17     14     15
4  20/10/2017   halim    25    21     23     16

I need column wise min.我需要列明智的分钟。 value.价值。 ie d1=6+13+16+25= 60 , d2=7+10+17+21= 55 , d3=8+11+14+23= 56 , d4= 9+12+15+19= 52 .即 d1=6+13+16+25= 60 , d2=7+10+17+21= 55 , d3=8+11+14+23= 56 , d4= 9+12+15+19= 52

Here as lower column is d4.这里作为下列是d4。 so my min _value col will be 9,12,15,19.所以我的min _value col 将是 9,12,15,19。

My next column is min_value_col .我的下一列是min_value_col It will be simply d4, d4, d4, d4.它将只是 d4、d4、d4、d4。

Now my output table will be as:现在我的输出表将是:

id date         name     d1    d2     d3     d4   min_value    min_value_col
1  20/10/2017   bimal    6     7      8      9    9              d4
2  20/10/2017   kumar    13    10     11     12   12             d4
3  20/10/2017   aman     16    17     14     15   15             d4
4  20/10/2017   halim    25    21     23     16   16             d4

I need to fill min_value and min_value_col field respectively through mysql query.我需要通过 mysql 查询分别填写min_valuemin_value_col字段。

Following query will give both min_value and min_value_col :以下查询将同时给出min_valuemin_value_col

select id,fr_date,name,d1,d2,d3,d4,
    @min_value_col:=case when least_sum= sum_d1 then 'd1' when
    least_sum= sum_d2 then 'd2' when least_sum= sum_d3 then 'd3' 
    when least_sum= sum_d4 then 'd4' end min_value_col,

    case @min_value_col when 'd1' then d1 when 'd2' then d2
    when 'd3' then d3 when 'd4' then d4 end min_value
from formal, 
    (select sum(d1) sum_d1,sum(d2) sum_d2,sum(d3) sum_d3, sum(d4) sum_d4, 
     least(sum(d1),sum(d2),sum(d3),sum(d4)) least_sum 
            from formal) TEMP

You seem to want:你似乎想要:

select f.*,
       (case ff.least_col
             when 'd1' then d1
             when 'd2' then d2
             when 'd3' then d3
             when 'd4' then d4
        end) as least_val,
       ff.least_col
from formal f cross join
     (select least(sum(d1), sum(d2), sum(d3), sum(d4)) as least_val,
             (case least(sum(d1), sum(d2), sum(d3), sum(d4))
                   when sum(d1) then 'd1'
                   when sum(d2) then 'd2'
                   when sum(d3) then 'd3'
                   when sum(d4) then 'd4'
              end) as least_col
      from formal
     ) ff;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM