2009-07-11 7 views
0

이와 같은 데이터 세트가 제공됩니다.GROUP BY ID 범위?

+-----+---------------------+--------+ 
| id | date    | result | 
+-----+---------------------+--------+ 
| 121 | 2009-07-11 13:23:24 |  -1 | 
| 122 | 2009-07-11 13:23:24 |  -1 | 
| 123 | 2009-07-11 13:23:24 |  -1 | 
| 124 | 2009-07-11 13:23:24 |  -1 | 
| 125 | 2009-07-11 13:23:24 |  -1 | 
| 126 | 2009-07-11 13:23:24 |  -1 | 
| 127 | 2009-07-11 13:23:24 |  -1 | 
| 128 | 2009-07-11 13:23:24 |  -1 | 
| 129 | 2009-07-11 13:23:24 |  -1 | 
| 130 | 2009-07-11 13:23:24 |  -1 | 
| 131 | 2009-07-11 13:23:24 |  -1 | 
| 132 | 2009-07-11 13:23:24 |  -1 | 
| 133 | 2009-07-11 13:23:24 |  -1 | 
| 134 | 2009-07-11 13:23:24 |  -1 | 
| 135 | 2009-07-11 13:23:24 |  -1 | 
| 136 | 2009-07-11 13:23:24 |  -1 | 
| 137 | 2009-07-11 13:23:24 |  -1 | 
| 138 | 2009-07-11 13:23:24 |  1 | 
| 139 | 2009-07-11 13:23:24 |  0 | 
| 140 | 2009-07-11 13:23:24 |  -1 | 
+-----+---------------------+--------+ 

한 번에 5 개 레코드로 결과를 그룹화하는 방법은 어떻게됩니까? 위의 결과는 실제 데이터의 일부이며 테이블에 증가하는 행 수가 100,000 개를 넘습니다. 기본적으로 나는 시간 경과에 따른 변화를 측정하고자하므로 모든 X 레코드 결과의 합계를 취하고 싶습니다. 실제 데이터에서 나는 100 또는 1000을 수행 할 것입니다. 그러나 위의 데이터는 아마도 5를 넘을 것입니다.

날짜별로 정렬 할 수 있다면 이렇게 할 것입니다.

SELECT 
    DATE_FORMAT(date, '%h%i') ym, 
    COUNT(result) 'Total Games', 
    SUM(result) as 'Score' 
FROM nn_log 
GROUP BY ym; 

나는 숫자와 비슷한 것을하는 방법을 알 수 없다. 순서는 날짜별로 정렬되지만 모든 x 결과에 데이터를 분할하려고합니다. 빈 행이 없다고 가정하는 것이 안전합니다.

위와 같이 할 수있는 데이터를 여러 개 선택하는 것은 다음과 같이 선택합니다.

SELECT SUM(result) FROM table LIMIT 0,5; 
SELECT SUM(result) FROM table LIMIT 5,5; 
SELECT SUM(result) FROM table LIMIT 10,5; 

더 큰 문제로 확장하는 방법은 분명 좋지 않습니다. 루프를 작성할 수는 있지만 쿼리 수를 줄이고 싶습니다.

답변

4

어떻게 ...

SELECT 
    floor(id/5) ym, 
    COUNT(result) 'Total Games', 
    SUM(result) as 'Score' 
FROM nn_log 
GROUP BY ym; 

는 (I은 ID가 있으리라 믿고있어 correlative)

이것은 쿼리에서 동일한 아이디어이며, 하루 대신 그룹화하는 데 사용됩니다. 당신 ~ 7 일 개 간격으로 그룹을 작동 할 것이다 연도 별

+0

감사합니다. 흥미롭게도 그 중 첫 번째 999 단지 내게 준 ...하지만 그걸로 살 수 있습니다. > 층 (ID/1000) YM, - -> COUNT (결과) '전체 게임', - '점수'로> SUM (결과) - MySQL의> 선택> nn_log FROM - YM BY> GROUP ; + ------ + ------------- + ------- + | ym | 총 게임 | 점수 | + ------ + ------------- + ------- + | 0 | 999 | -879 | | 1 | 1000 | -889 | | 2 | 1000 | -920 | | 3 | 1000 | -903 | .... –

+0

오 - 서식 오류가 발생했습니다. –

4

ROWNUMBER에서 정수 나누기를 사용하면됩니다.

당신이 당신의 id 열이 consecuitive 것을 확신하는 경우

그냥 사용 GROUP을 FLOOR에 의해 (ID/5)에 대한

0

그룹 (your_date), 주 (your_date)

.