gpt4 book ai didi

mysql - 如何在 SQL 中计算斜率

转载 作者:IT老高 更新时间:2023-10-29 00:11:48 26 4
gpt4 key购买 nike

我在 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 个。

SQL 越简单越好,因为我的数据库是专有的,我不太确定有哪些公式可用,尽管我知道如果有帮助的话它可以做 OVER(PARTITION BY)。谢谢!

更新:我将斜率定义为最适合 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(CAST(Date as float) * Score) AS Sum_XY
FROM Scores
GROUP BY Keyword
) G ON G.Keyword = Scores.Keyword;

它使用 Simple Linear Regression计算斜率。

结果:

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

每个数据库系统似乎都有不同的方法将日期转换为数字:

  • MySQL: TO_SECONDS(date)TO_DAYS(date)
  • Oracle: TO_NUMBER(TO_CHAR(date, 'J'))date - TO_DATE('1','yyyy')
  • MS SQL Server: CAST(date AS float)(或等效的CONVERT)

关于mysql - 如何在 SQL 中计算斜率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9084761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com