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

SQL GROUP BY:interval dalam kontinuitas?

Tidak ada fungsi seperti itu di "fungsi standar SQL", tetapi dimungkinkan untuk mendapatkan hasil yang diinginkan dengan menggunakan beberapa trik.

Dengan subquery yang diilustrasikan di bawah ini, kami membuat bidang virtual yang dapat Anda gunakan untuk GROUP BY dalam kueri luar. Nilai bidang virtual ini bertambah setiap kali ada celah dalam urutan oID . Dengan cara ini kami membuat pengidentifikasi untuk masing-masing "pulau data" tersebut:

SELECT  SUM(Area), COUNT(*) AS Count_Rows
FROM    (
        /* @group_enumerator is incremented each time there is a gap in oIDs continuity */
        SELECT  @group_enumerator := @group_enumerator + (@prev_oID != oID - 1) AS group_enumerator,
                @prev_oID := oID AS prev_oID,
                sample_table.*
        FROM    (
                SELECT  @group_enumerator := 0,
                        @prev_oID := -1
                ) vars,
                sample_table
        /* correct order is very important */
        ORDER BY
                oID
        ) q
GROUP BY
        group_enumerator

Tabel pengujian dan pembuatan data:

CREATE TABLE sample_table (oID INT auto_increment, Area INT, PRIMARY KEY(oID));
INSERT INTO sample_table (oID, Area) VALUES (1,5), (2,2), (3,3), (5,3), (6,4), (7,5);

Saya perlu berterima kasih kepada Quassnoi karena menunjukkan trik ini pertanyaan terkait saya ;-)

PEMBARUAN:menambahkan tabel dan data uji dan memperbaiki nama kolom duplikat dalam kueri contoh.



  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 menghilangkan mode SQL STRICT di MySQL

  2. Kesalahan Sintaks MySQL pada Pembuatan Tabel

  3. CakePHP:Bagaimana saya bisa menggunakan operasi HAVING saat membuat kueri dengan metode find?

  4. Terapkan Database MySQL Cloud Hybrid menggunakan ClusterControl

  5. Cara INSERT Jika Baris Tidak Ada (UPSERT) di MySQL