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

Menghitung nilai yang tidak bersebelahan

Permintaan pertama Anda sebaiknya Anda menulisnya seperti ini:

SELECT  guid, current_level , if(@id <> guid, @lev := 10, 0) AS useless, case when @id <> guid then @id := guid else 0 end AS useless2
         , (case when (current_level = 200 AND current_level <> @lev) then 1 else 0 end) as TIMES
        , if(current_level = 200 AND current_level <> @lev, @lev := current_level, 0) AS useless3

 FROM sensor_logs
 , (SELECT @id := 'none', @lev := 10) var_init_subquery
 ORDER BY guid

Tidak hanya lebih bersih untuk melakukan pemesanan secara eksplisit saat dibutuhkan, bukan di subquery, melakukannya di subquery juga dapat menyebabkan rencana eksekusi yang buruk (yang berarti kinerja buruk jika tabel sementara).

Untuk hasil akhir Anda, sebaiknya Anda tidak langsung menerapkan GROUP BY dan seterusnya. SELECT (dan karena itu variabel dan perhitungan Anda) dievaluasi setelah KELOMPOK OLEH. Untuk melakukan pengelompokan setelah perhitungan Anda, masukkan kueri Anda ke dalam subkueri:

SELECT guid, SUM(times) FROM (
    SELECT  guid, current_level , if(@id <> guid, @lev := 10, 0) AS useless, case when @id <> guid then @id := guid else 0 end AS useless2
             , (case when (current_level = 200 AND current_level <> @lev) then 1 else 0 end) as TIMES
            , if(current_level = 200 AND current_level <> @lev, @lev := current_level, 0) AS useless3

     FROM sensor_logs
     , (SELECT @id := 'none', @lev := 10) var_init_subquery
     ORDER BY guid
) sq
GROUP BY guid



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggunakan nilai string/kolom sebagai konstanta interval tanggal mysql (HARI, BULAN ...)?

  2. Bagaimana memilih semua baris tabel HTML

  3. Bagaimana saya bisa mengonversi pernyataan SQL ini ke Django QuerySet?

  4. Persistensi koneksi PHP MySQL

  5. Mysql mencetak bantuan alih-alih terhubung ke server