지정된 값보다 크거나 작은 행에 누적 합계가있는 행을 반환하는 방법은 무엇입니까?쿼리에서 누적 합계
테이블 :
id | count
-----------
1 | 30
2 | 10
3 | 5
4 | 20
5 | 15
쿼리 :
SELECT id, count
FROM table
ORDER BY id
HAVING SUM(count) < 50
반환 행 :
id | count
-------------
1 | 30
2 | 10
3 | 5
갱신
코드 :
public function query(){
switch($this->table){
case 'in_stock':
return "SELECT * FROM ".Init::$static['db'].".stock
WHERE id<=dynaccount.stock_first_available_id(".$this->value['num_stock'].", ".$this->value['product_id'].", ".(isset($this->att_arr['gid']) ? $this->att_arr['gid']:$_SESSION['gid']).")
ORDER BY time, id";
}
}
절차 :
DELIMITER $$
DROP FUNCTION IF EXISTS `stock_first_available_id` $$
CREATE DEFINER=`dynaccount`@`localhost` FUNCTION `stock_first_available_id`(_running_total_limit INT, _product_id INT, _group_id INT) RETURNS INT
BEGIN
DECLARE _running_count INT default 0;
DECLARE _id INT;
DECLARE _current_id INT;
DECLARE _sum_count INT;
IF (SELECT COUNT(*) FROM stock WHERE group_id=_group_id && type=2 && product_id=_product_id) = 0 THEN
RETURN 0;
END IF;
DECLARE _cur CURSOR FOR SELECT id, count FROM stock WHERE group_id=_group_id && type=2 && product_id=_product_id ORDER BY time DESC, id DESC;
OPEN _cur;
read_loop: LOOP
FETCH _cur INTO _id, _sum_count;
SET _running_count = _running_count + _sum_count;
SET _current_id = _id;
IF _running_count > _running_total_limit THEN
LEAVE read_loop;
END IF;
END LOOP read_loop;
CLOSE _cur;
RETURN _current_id;
END $$
DELIMITER ;
오류 :
가#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE _cur CURSOR FOR SELECT id, count FROM stock WHERE group_id=_group_id && ' at line 12
가 : 반환
: 당신은이를 사용할 수 있습니까? –
@ 뮤, 너 무슨 뜻이야? mysql에서 할 수 없는가? – clarkk
http://stackoverflow.com/questions/1135627/mysql-select-accumulated-column을 살펴보십시오. 누적 합계가 전체보다 적은 모든 행을 선택할 수 있습니다. – dash