안녕하세요 행끼리 연산 문의드립니다. 0 4 1,323

by 박종혁 [SQL Query] [2021.10.08 00:19:47]


앙녕하세요

지금 연산관련해서 쿼리를 계속 시도해보고 있는데

결과가 잘 나오지 않아서 질문드려요

mysql 5.7 버전을 사용중인데요 편의상 한글로 셀렉트문을 작성하였습니다.

------------------------------------------------------------

SELECT 
      @rownum := @rownum + 1 rownum
    , 작업자
    , 작업해야할총개수
    , SUM(작업완료개수)
    , 등록일
FROM fudeges, (select @rownum := 0) r    
WHERE 1=1                                
AND fudegesSeq = '15054'                                                                                                     
GROUP BY regDt                                                    
ORDER BY regDt DESC;            

------------------------------------------------------------

이와 같이 셀랙트를 하면 결과값이 아래와 같이 매일 새벽 1시에 

db에 insert가 됩니다.

rownum |   작업자     |   작업해야할개수 | 작업완료개수(누적) |  등록일
 2000      박종혁           100000                2000                2021-10-08 01:00:00
 1999      박종혁           100000                1800                 2021-10-07 01:00:00    
 1997      박종혁          100000                 1550                2021-10-06 01:00:00    
 1996      박종혁          100000                 1300                2021-10-05 01:00:00    
 1994      박종혁          100000                 1170                2021-10-04 01:00:00    
 1993      박종혁          100000                    .                    2021-10-03 01:00:00    
 1992      박종혁          100000                   .                    2021-10-02 01:00:00    
 1991      박종혁          100000                   .                    2021-10-01 01:00:00    
 1989      박종혁          100000                   .                    2021-09-30 01:00:00    
 1988      박종혁          100000                   .                    2021-09-29 01:00:00    
 1987      박종혁          100000                   .                    2021-09-28 01:00:00    
 1986      박종혁          100000                   .                    2021-09-27 01:00:00    
 1985      박종혁          100000                   .                   2021-09-26 01:00:00        
 1984      박종혁          100000                  100                2021-09-25 01:00:00    

 

총 작업해야할 물건을 받아서 작업을 하는데 

금일 기준으로 누적된 값만 쌓고 있는데

매일 새벽 1시에 배치로 값을 일괄 insert할 때 별도 작업량을 넣는 부분이 없어서

행 기준으로 작업완료 개수 를 계속 빼서 

아래와 같이 셀렉트 할때 작업완료개수(누적) 를 가지고

행끼리 빼면서 어제 작업량을(일일작업량) 계산하려고 합니다.

예를 들면 2000-1800 = 200,  1800 - 1550 = 250

바로 오늘 기준과 전날 기준으로만 계산해서 일일 작업량을 표현해야하는데요

버전때문인지 lead lag가 안먹는것같고

UNBOUNDED FOLLOWING 이것도 함수가 없는것 같네요 ..

혹시 이미 SUM(작업완료개수) 자체가 로우 데이터 합을 표현하고 있어서 

SUM(작업완료개수) - SUM(작업완료개수) 를 해야하는 것이문제인지 

결과값이 원하는대로 나오지가 않아서 질문드립니다. 

감사함니다

 

rownum |   작업자     |   작업해야할개수 | 작업완료개수(누적) | 어제한작업량         |        regDt
 2000       박종혁           100000                2000               200             2021-10-08 01:00:00
 1999       박종혁           100000                1800               250             2021-10-07 01:00:00    
 1997       박종혁           100000                1550               250             2021-10-06 01:00:00    
 1996       박종혁           100000                1300               130             2021-10-05 01:00:00    
 1994       박종혁           100000                1170                                 2021-10-04 01:00:00    
 1993       박종혁           100000                  .                                    2021-10-03 01:00:00    
 1992       박종혁           100000                   .                                   2021-10-02 01:00:00    
 1991       박종혁           100000                   .                                   2021-10-01 01:00:00    
 1989       박종혁           100000                   .                                   2021-09-30 01:00:00    
 1988       박종혁           100000                   .                                   2021-09-29 01:00:00    
 1987       박종혁           100000                   .                                   2021-09-28 01:00:00    
 1986       박종혁           100000                   .                                   2021-09-27 01:00:00    
 1985       박종혁           100000                   .                                   2021-09-26 01:00:00        
 1984       박종혁           100000                100                 0               2021-09-25 01:00:00    
                                                                         

 

by 마농 [2021.10.08 08:22:44]

그룹바이 구문이 표준에 어긋납니다.
작업자 및 작업해야할개수 도 집계 기준 항목이어야 합니다.
fudegesSeq = '15054' 이 조건을 주면 작업자는 1명만 나오게 되는 건가요?


by 마농 [2021.10.08 08:59:54]
SELECT rownum
     , 작업자
     , 작업해야할개수
     , 작업완료개수
     , 어제한작업량
     , regDt
  FROM (SELECT @rownum := @rownum + 1 AS rownum
             , 작업자
             , 작업해야할개수
             , 작업완료개수
             , 작업완료개수 - @어제작업완료개수 AS 어제한작업량
             , regDt
             , @어제작업완료개수 := 작업완료개수
          FROM (SELECT 작업자
                     , 작업해야할개수
                     , SUM(작업완료개수) 작업완료개수
                     , regDt
                  FROM fudeges
                     , (SELECT @rownum := 0
                             , @어제작업완료개수 := 0
                        ) r
                 WHERE 1=1
                   AND fudegesSeq = '15054'
                 GROUP BY 작업자, 작업해야할개수, regDt
                ) a
        ) a
 GROUP BY regDt DESC
;

 


by 박종혁 [2021.10.08 11:31:59]

답변 감사합니다.

fudegesSeq 조건을 주면 예를들어 그 작업 종류만 나오게 되고

그룹바이를 날짜로 한건 

그룹바이를 풀면 데이터가 전부 연산된 하나로만 나오는데

날짜별로 정렬하기 위해서 그렇게 했습니다!


by 마농 [2021.10.08 13:21:04]

그룹바이를 풀라는게 아닙니다.
그룹바이를 잘 못 사용했다는 것입니다.
그룹아이에 없는 항목인 작업자, 작업해야할개수가 Select 절에 오는 것은 원칙적으로 오류입니다.
MySQL 에서는 오류가 나지 않지만 다른 DBMS 에서는 오류가 나는 구문입니다.
작업 종류 하나에 대해 작업자가 1명 뿐이라면 그룹바이에 작업자를 추가헤야 하고
작업 종류 하나에 대해 작업자가 여러명이라면 SELECT 절에 작업자를 그대로 사용하면 안됩니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입