2015-02-25 3 views
0

Например, у меня есть table1:Как суммировать значения в столбце на основе другого столбца или другой группы?

+---------------------+---------------+---------------+---------------+ 
| StartTime   | dIPaddr  | countNum  |  rowid | 
+---------------------+---------------+---------------+---------------+ 
| 2014-04-09 09:47:53 | 0.210.208.240 |  2  |   1  | 
| 2014-04-09 09:47:54 | 0.210.208.240 |  0  |   2  | 
| 2014-04-09 09:47:55 | 0.210.208.240 |  1  |   3  | 
| 2014-04-09 08:39:55 | 0.210.243.93 |  1  |   1  | 
| 2014-04-09 08:39:56 | 0.210.243.93 |  0  |   2  | 
| 2014-04-09 08:39:57 | 0.210.243.93 |  1  |   3  | 
| 2014-04-09 13:02:25 | 0.210.25.224 |  3  |   1  | 
| 2014-04-09 13:02:26 | 0.210.25.224 |  0  |   2  | 
| 2014-04-09 13:02:27 | 0.210.25.224 |  1  |   3  | 
+---------------------+---------------+---------------+---------------+ 

ROWID основан на различных dIPaddr, в каждой группе dIPaddr, она RowId по заказу StartTime. Я использую эту команду, чтобы добавить ROWID для них:

ALTER TABLE table1 
ADD COLUMN rowId int not null auto_increment, 
ADD PRIMARY KEY(dIPaddr, rowId), 
ENGINE=MyISAM; 

Я хочу подвести первый countNum каждого dIPaddr в очередной раз, обобщать второй countNum каждого dIPaddr дела, сумму каждого dIPaddr в третьем countNum вверх. Если использовать псевдо-код, он должен выглядеть следующим образом:

dIPaddr(0.210.208.240).rowid(1).countNum+dIPaddr(0.210.243.93).rowid(1).countNum+dIPaddr(0.210.25.224).rowid(1).countNum 

dIPaddr(0.210.208.240).rowid(2).countNum+dIPaddr(0.210.243.93).rowid(2).countNum+dIPaddr(0.210.25.224).rowid(2).countNum 

dIPaddr(0.210.208.240).rowid(3).countNum+dIPaddr(0.210.243.93).rowid(3).countNum+dIPaddr(0.210.25.224).rowid(3).countNum 

Так финальный стол должен выглядеть следующим образом:

+-------+ 
| count | 
+-------+ 
|  6 | 
|  0 | 
|  3 | 
+-------+ 

Я очень новый студент для использования базы данных, извините за мой простой вопрос. Спасибо всем за помощь! Кстати, это просто простой пример моей реальной базы данных, на самом деле, каждый dIPaddr имеет более 100 записей для их rowid. Поэтому я не могу просто использовать ограничение 3 для некоторых простых вычислений.

+0

'выберите сумму (countNum) в общей сложности, ROWID из table1 группы по rowid' –

ответ

1

Попробуйте это:

SELECT SUM(countNum) as Total FROM tbl_name GROUP BY rowid 
+0

На самом деле, каждый dIPaddr имеет различный диапазон ROWID, например, только имеют RowId диапазоны от 1 ~ 10, B имеет диапазоны рядов от 1 до 5. Минимальный rowid каждого из их наибольшего rowid равен 5, поэтому я хочу только суммировать это, пока их rowid равно 5. Так что мне делать? SELECT SUM (countNum) как Total FROM tbl_name GROUP BY rowid limit 5? или SELECT SUM (countNum) как Total FROM tbl_name GROUP BY rowid с rowid <= 5? – beasone

+1

, пожалуйста, попробуйте <= 5 запрос или попробуйте выполнить запрос с помощью группы с помощью dIPaddr? –

+0

<= 5 работает нормально. Спасибо за вашу помощь! – beasone

Смежные вопросы