"SQL의 표준 기능"에는 이러한 기능이 없지만 몇 가지 트릭을 사용하여 원하는 결과 집합을 얻을 수 있습니다.
아래 그림의 하위 쿼리를 사용하면 바깥 쿼리에서 GROUP BY
에 사용할 수있는 가상 필드를 만들 수 있습니다. 이 가상 필드의 값은 oID
시퀀스에 간격이있을 때마다 증가합니다. 우리가 그 "데이터 아일랜드"의 각각에 대한 식별자를 만드는이 방법 :
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
테스트 테이블 및 데이터 생성 :
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);
내가 this trick in my related question ;-)
을 지적 Quassnoi 감사합니다
UPDATE : 예제 쿼리에서 테스트 테이블과 데이터를 추가하고 중복 된 열 이름을 고정했습니다.
임시 테이블을 사용하지 않고도이 작업을 수행 할 수 있습니다. – Kaii