sql >> データベース >  >> RDS >> Mysql

SQLで勾配を計算する方法

    私が作ることができる最もきれいなもの:

    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;
    

    単純線形回帰 を使用します 勾配を計算します。

    結果:

    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)
    • オラクル: TO_NUMBER(TO_CHAR(date, 'J')) またはdate - TO_DATE('1','yyyy')
    • MS SQL Server: CAST(date AS float) (または同等のCONVERT


    1. MySQLのバックアップとコマンドラインからの復元

    2. MySQLデータベースからの制約のリスト

    3. バージョン番号のmysqlソート

    4. Postgresハッシュパーティショニングでどのパーティションが使用されるかを知る方法は?