반응형
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'
.
의 가치Runs
NULL이 아닌 경우에도 대체됩니다. 또는 원본을 사용할 수 있습니다.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
반응형
'programing' 카테고리의 다른 글
NHNibernate는 무엇입니까? (0) | 2023.08.23 |
---|---|
jqueryuiDialog: 초기화 전에 대화 상자에서 메서드를 호출할 수 없습니다. (0) | 2023.08.23 |
Maria에서 고유한 값을 가진 쿼리를 제한하려면 어떻게 합니까?DB (0) | 2023.08.23 |
Nodejs 이벤트 루프 (0) | 2023.08.23 |
책임감 있는 MySQL 설치 플레이북 (0) | 2023.08.23 |