Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

cara mendapatkan tren teratas dengan avg mysql

Apa yang Anda inginkan di sini adalah menjalankan rata-rata catatan M masa lalu mulai dari catatan saat ini dan kita perlu memilih catatan saat ini jika nilai kolom catatan saat ini lebih besar dari rata-rata berjalan.

Inilah upaya saya untuk itu:

SET @M := 2;

SELECT * FROM
(
  SELECT (@rownumber:= @rownumber + 1) AS rn, yt.*
  FROM your_table yt,(SELECT @rownumber:= 0) nums
  ORDER BY name, id
) a
WHERE a.var1 > 
(
    SELECT avg(b.var1)
    FROM
    (
      SELECT (@rownumber:= @rownumber + 1) AS rn, yt.*
      FROM your_table yt,(SELECT @rownumber:= 0) nums
      ORDER BY name, id
    ) b
    WHERE b.rn > a.rn - @M AND b.rn <= a.rn 
)

@M adalah jumlah catatan masa lalu yang harus dipertimbangkan untuk menemukan rata-rata berjalan.

Berikut adalah kode di SQL Fiddle

[EDIT]:

Berikut adalah solusi lain yang menurut saya seharusnya lebih efisien daripada kueri yang berkorelasi.

SET @M := 2;

 SELECT a.* FROM
 ( 
  SELECT (@rownumber:= @rownumber + 1) AS rn, yt.*
      FROM your_table yt,(SELECT @rownumber:= 0) nums
      ORDER BY name, id
 ) a
 JOIN 
 (
    SELECT b.name, b.rn, AVG(c.var1) AS av
    FROM
    (
      SELECT (@rownumber1:= @rownumber1 + 1) AS rn, yt.*
      FROM your_table yt,(SELECT @rownumber1:= 0) nums
      ORDER BY name, id
    ) b
    JOIN
    (
      SELECT (@rownumber2:= @rownumber2 + 1) AS rn, yt.*
      FROM your_table yt,(SELECT @rownumber2:= 0) nums
      ORDER BY name, id
    ) c
    ON b.name = c.name
    AND c.rn > (b.rn - @M) AND c.rn <= b.rn
    GROUP BY b.name,b.rn
 ) runningavg 
 ON a.name = runningavg.name
 AND a.rn = runningavg.rn
 AND a.var1 > runningavg.av

Di sini saya telah menggunakan inner join sederhana untuk menghitung rata-rata berjalan dan lagi dengan gabungan dalam telah memilih baris yang memiliki nilai kolom lebih besar dari rata-rata.

Berikut adalah kode di SQL Fiddle

Beri tahu saya apakah itu terbukti efisien.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Array host basis data kosong. setelah menerapkan proyek Laravel di AWS Elastic Beanstalk

  2. php cara menautkan file dari server file ke info itu dari database

  3. Panduan Merancang Database Untuk Newsletter Di MySQL

  4. Mysql:beberapa tabel atau satu tabel besar?

  5. Google Chart Api memanfaatkan nilai datetime