programing

데이터가 현재 값보다 낮은 값을 갖는 데이터 선택

procenter 2022. 12. 29. 21:42
반응형

데이터가 현재 값보다 낮은 값을 갖는 데이터 선택

데이터가 있다

user    indeks_sum    sks_sum    year
2000    76            21         20191
2000    NULL          21         20192 
2012    12            24         20191
2012    NULL           8         20192
2042    21            16         20191
2042    NULL           9         20192
2069    8              2         20191
2069    4              1         20192

예상되는 결과:

user    indeks_sum    sks_sum    year
2000    76            21         20191
2000    76            42         20192 
2012    12            24         20191
2012    12            32         20192
2042    21            16         20191
2042    21            25         20192
2069    8              2         20191
2069    12             3         20192

indeks_sum그리고.sks_sum매회 증가하다year
해봤다

select * user,sum(indeks_sum) as indeks_sum, sum(sks_sum) as sks_sum, year
from ips
where year <= year
group by user,year

결과는 그대로입니다.
잘 부탁드립니다

MySQL/MariaDB 버전이 지원하는 경우 창 함수를 사용할 수 있습니다. 창 합계에 적합한 사용 사례입니다.

select
    user,
    sum(indeks_sum) over(partition by user order by year)) indeks_sum,
    sum(sks_sum)    over(partition by user order by year) sks_sum,
    year
from ips
order by user, year

DB Fielen 데모:

user | index_sum | sks_sum | year---: | ---------: | ------: | ----:2000 |         76 |      21 | 201912000 |         76 |      42 | 201922012 |         12 |      24 | 201912012 |         12 |      32 | 201922042 |         21 |      16 | 201912042 |         21 |      25 | 201922069 |          8 |       2 | 201912069 |          4 |       3 | 20192

이전 버전에서는 관련 서브쿼리를 사용한1가지 접근방식을 다음에 나타냅니다.

select
    i.user,
    (select sum(i1.indeks_sum) from ips i1 where i1.user = i.user and i1.year <= i.year) indeks_sum,
    (select sum(i1.sks_sum)    from ips i1 where i1.user = i.user and i1.year <= i.year) sks_sum,
    i.year
from ips i
order by i.user, i.year

퍼포먼스를 위해서, 다음의 인덱스를 고려해 주세요.(user, year, indeks_sum)또 다른 것은(user, year, sks_sum).

데모

언급URL : https://stackoverflow.com/questions/60672715/select-data-where-data-have-value-below-current-value

반응형