请问一sql java的问题

xx2 2017-07-05 03:59:40
有一张表 里面有个字段叫 point ,数值型,
我现在需要按照point 从小到大排序, 累计正好超过 一个最大值的纪录列出来

id point
------------
1 1
2 1
3 2
4 2
5 2
6 3
7 3

如果最大值是 10, 那么正好前5条纪录被列出来,1+1+2+2+2+3 =11
当然我可以用java 循环累加,
但是当这个数值很大,比如100万的时候,累加效率就差了,有什么好的方法呢?

...全文
289 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈哈· 2017-07-07
  • 打赏
  • 举报
回复
可以使用存储过程
drop PROCEDURE  if EXISTS pro_test3 ;
DELIMITER $ 
create procedure pro_test3()
BEGIN
	DECLARE v_id int DEFAULT 0;
	DECLARE v_count int DEFAULT 0 ;
	DECLARE v_allCount int DEFAULT 0;
	DECLARE v_dateNotFount int default 0;
	DECLARE my_cursor CURSOR for SELECT p.id,p.point from point p ;
	DECLARE continue handler for NOT FOUND SET v_dateNotFount = 1;

	OPEN my_cursor;
		FETCH my_cursor INTO v_id,v_count;
		loop_lable : LOOP
			set v_allCount = v_allCount +  v_count;
			IF (v_allCount > 100) THEN
				-- SET @id = v_id;
				LEAVE loop_lable;
			ELSEIF (v_dateNotFount = 1) THEN
				-- SET @id = v_id;
				LEAVE loop_lable;
			ELSE 
				FETCH my_cursor INTO v_id,v_count;
				ITERATE loop_lable;
			END IF;
		END LOOP;
	CLOSE my_cursor;
	SELECT * from point p where p.id <= v_id;
END $
DELIMITER ;
调用 CALL pro_test3();
mt23 2017-07-06
  • 打赏
  • 举报
回复
数据量大了肯定是需要分表的,首先通过一定的学习方式来合理的划分point与分表的关系,其次在每个分表中记录每个表中所有point的总和,在要进行判断最大值的时候,先对分表进行排序,然后累加求和,判断哪个分表是转折点,再具体在对应分表中累加求和。找到所有记录数。这样的思路类似二分法。个人看法,仅供参考。
110成成 2017-07-06
  • 打赏
  • 举报
回复
首先,如果数据量大,肯定是不能放在一个表存储,肯定是要分表存储,比如说这个表存储从1到5w的数字,第二张表存储50001到10w的数字,以此类推,这要求你在存的时候就要判断,分表之后,后续计算可以放在存储过程中去计算,个人看法。
  • 打赏
  • 举报
回复
确实,数据这么多,循环查肯定效率极低。 所以可以先按照point 排一下续。然后分成多表进行操作。
MikeDDT009 2017-07-05
  • 打赏
  • 举报
回复
这玩意还真只想到循环这个笨办法,而且非常的蛋疼,因为就算循环做的话也需要一个一个的累加判断。 比如,才开始取第一个数,然后判断是否大于或者等于最大值,如果小于,那么才取第二个数累加,然后再判断,如果还小于,那么就要取第三个累加,假如这个时候满足了。然后又要从第四个数又开始。然后就会发现,要找找看有没有规律,如果没有规律+重复的话,循环还不能用。 至于数据库触发器,没记错的话只能是更新,插入,删除才行。 所以如果是100W个数字,我就感觉蛋蛋很疼了。。。。。
晨曦遇晓 2017-07-05
  • 打赏
  • 举报
回复
数据库的sum函数+触发器
minemine0418 2017-07-05
  • 打赏
  • 举报
回复
可以写函数,没必要。。。

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧