programing

SQL 쿼리 : 다른 열을 기준으로 열에 값을 추가합니다.

yellowcard 2023. 8. 23. 21:43
반응형

SQL 쿼리 : 다른 열을 기준으로 열에 값을 추가합니다.

다음과 같은 데이터 세트가 있습니다.

Part          Runs          Duration          Date
-------------------------------------------------------
random_1       NULL          20              2020-01-01           
random_2       NULL          1               2020-01-01            
random_3       NULL          4               2020-01-01           
tot_rand       40            NULL            2020-01-01           
random_1       NULL          60              2020-01-02           
random_2       NULL          12              2020-01-02            
random_3       NULL          3               2020-01-02           
tot_rand       100           NULL            2020-01-02           
random_1       NULL          9               2020-01-10           
random_2       NULL          4               2020-01-10            
tot_rand       30            NULL            2020-01-10           

이제 열에 NULL 값 대신Runs나는 추가하고 싶습니다.tot_rand동일한 값Date.

따라서 결과는 다음과 같습니다.

Part          Runs          Duration          Date     
-------------------------------------------------------
random_1       40           20              2020-01-01           
random_2       40           1               2020-01-01            
random_3       40           4               2020-01-01           
tot_rand       40           NULL            2020-01-01           
random_1       100          60              2020-01-02           
random_2       100          12              2020-01-02            
random_3       100          3               2020-01-02           
tot_rand       100          NULL            2020-01-02           
random_1       30           9               2020-01-10           
random_2       30           4               2020-01-10            
tot_rand       30           NULL            2020-01-10   

그 이유는 결국 다음과 같은 새로운 열을 만들고 싶기 때문입니다.All다음과 같이 계산됩니다.

(Runs - Duration) / Runs

최종 결과

Part          Runs          Duration          Date           All
---------------------------------------------------------------------
random_1       40           20              2020-01-01       0.5
random_2       40           1               2020-01-01       0.975     
random_3       40           4               2020-01-01       0.9    
tot_rand       40           NULL            2020-01-01       NULL    
random_1       100          60              2020-01-02       0.4  
random_2       100          12              2020-01-02       0.88    
random_3       100          3               2020-01-02       0.97    
tot_rand       100          NULL            2020-01-02       NULL    
random_1       30           9               2020-01-10       0.7    
random_2       30           4               2020-01-10       0.86     
tot_rand       30           NULL            2020-01-10       NULL

저는 MariaDB / MySQL 환경에서 일하고 있습니다.

어쩌면 다른 방법이 있을까요?저는 제안을 받을 수 있습니다.

창 기능을 사용할 수 있습니다.

select t.*,
       coalesce(runs, max(runs) over (partition by date)) as imputed_runs
from t;

만약 당신이 특별히 원한다면.'tot_rand'값, 조건부 집계를 사용할 수 있습니다.

select t.*,
       coalesce(runs,
                 max(case when part = 'tot_rand' then runs end) over (partition by date)
               ) as imputed_runs
from t;

만약 당신이 원한다면,update한 가지 접근 방식은 다음과 같습니다.

update t join
       (select date, max(runs) as max_runs
        from t
        where part = 'tot_rand'
        group by date
       ) tt
       on t.date = tt.date
    set runs = tt.max_runs
    where tt.runs is null;

하위 쿼리는 집계를 필요로 하지 않을 수 있지만 다음보다 많을 수 있는지는 불분명합니다.'tot_rand'값을 입력합니다.

SELECT t1.Part, t2.Runs, t1.Duration, `Date`, 1 - t1.Duration / t2.Runs `All`
FROM test t1
JOIN test t2 USING (`Date`)
WHERE t2.Part = 'tot_rand'

각 행에 대해 하나만Date값은 포함해야 합니다.Part = 'tot_rand'.

의 가치RunsNULL이 아닌 경우에도 대체됩니다. 또는 원본을 사용할 수 있습니다.t1.Runs그렇지만t2.Runs또는COALESCE(t1.Runs, t2.Runs)All계산

https://dbfiddle.uk/ ?rdbms=sys_8.0&sysdle=sys969fc417980aa3688bb4sx67bb2

언급URL : https://stackoverflow.com/questions/67771959/sql-query-add-values-to-columns-based-on-other-columns

반응형