mysql – 不能累计求和`COUNT(*)`
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 不能累计求和`COUNT(*)`,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2357字,纯文字阅读大概需要4分钟。
内容图文
![mysql – 不能累计求和`COUNT(*)`](/upload/InfoBanner/zyjiaocheng/905/119496fe04144704bcdd991435c0e5b7.jpg)
this answer的第二部分使用变量来创建另一列的累积和.我正在做同样的事情,除了我使用GROUP BY语句,并且总结COUNT(*)而不是列.这是我创建最小表和插入值的代码:
CREATE TABLE `test_group_cumulative` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`group_id` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `test_group_cumulative` (`id`, `group_id`)
VALUES
(1, 1),
(2, 2),
(3, 3);
以下是失败的代码:
SELECT
`group_id`,
COUNT(*) AS `count`,
@count_cumulative := @count_cumulative + COUNT(*) AS `count_cumulative`
FROM `test_group_cumulative` AS `tgc`
JOIN (SELECT @count_cumulative := 0) AS `_count_cumulative`
GROUP BY `group_id`
ORDER BY `id`;
结果如下:
group_id count count_cumulative
1 1 1
2 1 1
3 1 1
如您所见,count_cumulative不能正确求和.然而,这是奇怪的部分.如果我将count_cumulative中的COUNT(*)替换为它的值1,则查询可以正常工作.
@count_cumulative := @count_cumulative + 1 AS `count_cumulative`
这是正确的结果:
group_id count count_cumulative
1 1 1
2 1 2
3 1 3
显然,在我的应用程序中,每个组中都会有多个项目,因此COUNT(*)并不总是1.我知道有多种方法可以使用连接或子查询来执行此操作,如果我有,我会这样做必须,但在我看来,这应该工作.那么为什么COUNT(*)不在累积金额内工作?
解决方法:
这是我在进行时间序列分析时经常遇到的问题.解决这个问题的首选方法是将其包装到第二个选择中,并在最后一层引入计数器.如果需要,您可以使用临时表将此技术调整为更复杂的数据流.
我使用你提供的架构做了这个小小的平板电脑:http://sqlfiddle.com/#!2 / cc97e / 21
以下是获取累积计数的查询:
SELECT
tgc.group_id, @count_cumulative := @count_cumulative + cnt as cum_cnt
FROM (
SELECT
group_id, COUNT(*) AS cnt
FROM `test_group_cumulative`
group by group_id
order by id) AS `tgc`,
(SELECT @count_cumulative := 0) AS `temp_var`;
这是我得到的结果:
GROUP_ID CUM_CNT
1 1
2 2
3 3
你的尝试不起作用的原因:
当您使用临时变量执行分组时,mysql独立地执行各个组,并且在每个组分配临时变量当前值时,在本例中为0.
如果,您运行此查询:
SELECT @count_cumulative;
之后立马
SELECT
`group_id`,
COUNT(*) AS `count`,
@count_cumulative := @count_cumulative + COUNT(*) AS `count_cumulative`
FROM `test_group_cumulative` AS `tgc`
JOIN (SELECT @count_cumulative := 0) AS `_count_cumulative`
GROUP BY `group_id`
ORDER BY `id`;
你会得到值1.对于你的每个组,@ count_cumulative被重置为0.
因此,在我提出的解决方案中,我首先通过生成“组计数”然后进行累积来规避这个问题.
内容总结
以上是互联网集市为您收集整理的mysql – 不能累计求和`COUNT(*)`全部内容,希望文章能够帮你解决mysql – 不能累计求和`COUNT(*)`所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。