본문 바로가기
MySql

MySQL SQL에서 기울기를 계산하는 방법

by 베이스 공부 2020. 9. 22.
반응형

SQL 데이터베이스에 일부 데이터가 있고 기울기를 계산하고 싶습니다. 데이터에는 다음 레이아웃이 있습니다.

Date        |  Keyword  |  Score    
2012-01-10  |  ipad     |  0.12    
2012-01-11  |  ipad     |  0.17    
2012-01-12  |  ipad     |  0.24    
2012-01-10  |  taco     |  0.19    
2012-01-11  |  taco     |  0.34    
2012-01-12  |  taco     |  0.45    

SQL을 사용하여 새 테이블을 생성하여 최종 출력을 다음과 같이 표시하고 싶습니다.

Date        |  Keyword  |  Score |  Slope    
2012-01-10  |  ipad     |  0.12  |  0.06    
2012-01-11  |  ipad     |  0.17  |  0.06    
2012-01-12  |  ipad     |  0.24  |  0.06    
2012-01-10  |  taco     |  0.19  |  0.13    
2012-01-11  |  taco     |  0.34  |  0.13    
2012-01-12  |  taco     |  0.45  |  0.13

복잡하게 말하면 모든 키워드에 3 개의 날짜에 해당하는 데이터가있는 것은 아닙니다. 예를 들어 일부 키워드에는 2 개만 있습니다.

내 데이터베이스가 독점적이며 사용 가능한 수식이 무엇인지 잘 모르겠지만 도움이된다면 OVER (PARTITION BY)를 수행 할 수 있다는 것을 알고 있지만 SQL이 더 간단할수록 더 좋습니다. 감사합니다!

업데이트 : 나는 기울기를 가장 잘 맞는 것으로 정의합니다 .y = mx + p 일명 Excel에서 = slope ()

다음은 일반적으로 Excel에서 조작하는 또 다른 실제 예입니다.

date        keyword         score       slope   
1/22/2012   water bottle    0.010885442 0.000334784  
1/23/2012   water bottle    0.011203949 0.000334784  
1/24/2012   water bottle    0.008460835 0.000334784  
1/25/2012   water bottle    0.010363991 0.000334784  
1/26/2012   water bottle    0.011800716 0.000334784  
1/27/2012   water bottle    0.012948411 0.000334784  
1/28/2012   water bottle    0.012732459 0.000334784  
1/29/2012   water bottle    0.011682568 0.000334784  

 

해결 방법

 

내가 만들 수있는 가장 깨끗한 것 :

SELECT
    Scores.Date, Scores.Keyword, Scores.Score,
    (N * Sum_XY - Sum_X * Sum_Y)/(N * Sum_X2 - Sum_X * Sum_X) AS Slope
FROM Scores
INNER JOIN (
    SELECT
        Keyword,
        COUNT(*) AS N,
        SUM(CAST(Date as float)) AS Sum_X,
        SUM(CAST(Date as float) * CAST(Date as float)) AS Sum_X2,
        SUM(Score) AS Sum_Y,
        SUM(Score*Score) AS Sum_Y2,
        SUM(CAST(Date as float) * Score) AS Sum_XY
    FROM Scores
    GROUP BY Keyword
) G ON G.Keyword = Scores.Keyword;


결과:

Date         Keyword        Score         Slope
2012-01-22   water bottle   0,010885442   0,000334784345222076
2012-01-23   water bottle   0,011203949   0,000334784345222076
2012-01-24   water bottle   0,008460835   0,000334784345222076
2012-01-25   water bottle   0,010363991   0,000334784345222076
2012-01-26   water bottle   0,011800716   0,000334784345222076
2012-01-27   water bottle   0,012948411   0,000334784345222076
2012-01-28   water bottle   0,012732459   0,000334784345222076
2012-01-29   water bottle   0,011682568   0,000334784345222076

모든 데이터베이스 시스템은 날짜를 숫자로 변환하는 방법이 다른 것 같습니다.

 

참조 페이지 https://stackoverflow.com/questions/9084761

 

 

반응형

댓글