2017-10-10 5 views
-1

내가 하나의 날짜의 모든 필드 총 경우 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임을 의미합니다. 그래서 을 min_value 필드에 입력하고 각각 calcu 필드에 입력해야합니다.

SQL 쿼리를 통해 min_value 필드를 완성하는 방법은 무엇입니까?

MYSQL 데이터베이스를 사용하고 있습니다.

Plz SQL 쿼리 및 쿼리 결과를 보여줍니다.

+2

PLS. DBMS (MySQL, MS SQL Server, Oracle 등)에 태그를 지정합니다. –

+0

당신은 이것을 볼 수 있습니다 ... 그것은 당신에게 도움이 될 수 있습니다. https://stackoverflow.com/questions/10742616/get-column-name-which-has-the-max-value-in-a-row-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

+0

내 문제가 해결되었습니다. 지금 행 총 가치를 얻을 수 있을까요? 나는 새로운 열'total'에서, id = 1, (12 + 15 + 17 + 19) = 63, id = 2, (28 + 13 + 19 + 10) = 70 여기서 id = 3이다. –

+0

여기에서 내 문제를 확인하십시오. http://sqlfiddle.com/#!9/31579c/5 –

+0

왜'sum (c.s1 + c.s2 + c.s3 + c.s4)'를 넣었습니까? 단순히'c.s1 + c.s2 + c.s3 + c.s4'에'sum'이 없기 때문에, 행 자체에 값을 추가하고 여러 행에 데이터를 집계하지 않기를 원하기 때문입니다. http://sqlfiddle.com/#!9/31579c/40 –