例如,我有一个表1:
+---------------------+---------------+---------------+---------------+
| 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 组中,它都有按 StartTime 排序的 rowid。我使用此命令为它们添加 rowid:
ALTER TABLE table1
ADD COLUMN rowId int not null auto_increment,
ADD PRIMARY KEY(dIPaddr, rowId),
ENGINE=MyISAM;
我想对每个 dIPaddr 的第一个计数进行求和,将每个 dIPaddr 的第二个计数求和,将每个 dIPaddr 的第三个计数数求和。如果使用伪代码,它应如下所示:
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 多条记录。所以我不能只使用极限 3 来做一些简单的计算。
试试这个:
SELECT SUM(countNum) as Total FROM tbl_name GROUP BY rowid