Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách tính độ dốc trong SQL

Cái sạch nhất mà tôi có thể làm:

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;

Nó sử dụng Hồi quy tuyến tính đơn giản để tính toán độ dốc.

Kết quả:

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

Mọi hệ thống cơ sở dữ liệu dường như có một cách tiếp cận khác nhau để chuyển đổi ngày tháng sang số:

  • MySQL: TO_SECONDS(date) hoặc TO_DAYS(date)
  • Oracle: TO_NUMBER(TO_CHAR(date, 'J')) hoặc date - TO_DATE('1','yyyy')
  • Máy chủ MS SQL: CAST(date AS float) (hoặc CONVERT tương đương )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP mysql_stmt ::fetch () cung cấp cho PHP bộ nhớ lỗi nghiêm trọng

  2. Node.js kết nối với vùng chứa MySQL Docker ECONNREFUSED

  3. Tập lệnh shell Linux để sao lưu cơ sở dữ liệu

  4. Struts + Hibernate:@SessionTarget không hoạt động

  5. Làm cách nào để lưu trữ ngày UTC ISO8601 trong cơ sở dữ liệu MySQL?