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.