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

SQL:Mengambil jumlah total sebagai subselect sangat lambat

Daripada mengelompokkan semua bidang itu, solusi yang lebih sederhana (dan lebih cepat) (dari di sini ) mungkin:

GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600

Saya tidak dapat membayangkan bahwa kueri Anda mengembalikan hasil yang Anda inginkan (jika saya memahami persyaratan Anda dengan benar). Saya memahami persyaratan Anda karena, ketika tidak ada baris untuk jam tertentu, Anda ingin menghitung jumlah semua baris dengan jam

Tidak ada cara efisien yang mudah untuk melakukan ini di MySQL yang saya tahu, saya sarankan membuat tabel sementara dengan semua kemungkinan nilai pengelompokan dalam rentang yang Anda lihat (mungkin dengan satu lingkaran). Anda mungkin dapat mengatur tabel ini sebelumnya selama beberapa tahun, dan mungkin menambahkan baris sesuai kebutuhan. Kemudian Anda bisa pergi bergabung dengan tabel ini dan meja Anda.

Jika Anda menggunakan MSSQL, Anda bisa menggunakan CTE rekursif, meskipun ini mungkin akan sangat lambat. Lihat ini atau google "mysql cte" untuk alternatif MySQL. Cara melakukan ini dengan rekursi adalah (kiri) bergabung pada tabel yang sama berulang kali selama HOUR = HOUR+1 sampai Anda mendapatkan nilai non-NULL, lalu berhenti. Untuk masing-masingnya, Anda akan menghitung jumlahnya secara terbalik.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ganti nama kolom di MySQL

  2. Optimasi SQL Query - waktu eksekutif

  3. Apakah indeks UNIK peka huruf besar/kecil di MySQL?

  4. Cara memangkas waktu dari stempel waktu menggunakan php

  5. `Diidentifikasi Dengan Kata Sandi` di Buat Database MySQL