반응형
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
반응형
'MySql' 카테고리의 다른 글
MySQL 이진 데이터 유형에 MySql 삽입 문? (0) | 2020.09.22 |
---|---|
MySQL SUM IF 필드 b = 필드 a (0) | 2020.09.22 |
MySQL Doctrine 2에서 QueryBuilder를 사용하여 SELECT 하위 쿼리로 LEFT JOIN을 만드는 방법은 무엇입니까? (0) | 2020.09.22 |
MySQL mySQL Workbench를 사용하여 사용자에게 테이블 권한 추가 (0) | 2020.09.22 |
MySQL PHP에서 입력 유형 버튼을 눌렀는지 확인하는 방법은 무엇입니까? (0) | 2020.09.22 |
댓글