[英]MySQL sum multiple duplicated rows
我有两个表在第一个表“项目”中,存储有价格的项目:
id price
1 40
2 55
3 70
在第二个表中,“集”,已存储的项目集以及包含在集合中的项目以逗号分隔列表的形式存储:
id items
1 1,2,3
2 2,2,3,3
3 1,2,1,2
我需要获得套子的总价。
SELECT id, (
SELECT SUM(price)
FROM `items` AS i
WHERE i.id IN ( s.items )
) AS total_price
FROM `sets` AS s
但是,如果“ s.items”中存在重复项,则总和是错误的。
PS对不起,我的英语。
"item"
item_id price
1 40
2 55
3 70
"sets"
set_id set_name
1 blah
2 wow
3 awesome
"set_item"
set_item_id set_id item_id
1 1 1
2 1 2
3 1 3
4 2 2
5 2 2
6 2 3
7 2 3
8 3 1
9 3 2
10 3 1
11 3 2
select s.set_id,s.set_name, sum(i.price)
from set_item si
join sets s on si.set_id = s.set_id
join item i on si.item_id = i.item_id
group by si.set_id;
+--------+----------+--------------+
| set_id | set_name | sum(i.price) |
+--------+----------+--------------+
| 1 | blah | 165 |
| 2 | wow | 250 |
| 3 | awesome | 190 |
+--------+----------+--------------+
我自己解决了问题。 我用SQL编写了函数。 称为“ calcSum”,它具有一个TEXT参数“ list”:
BEGIN
DECLARE strLen INT DEFAULT 0;
DECLARE subStrLen INT DEFAULT 0;
DECLARE totalSum INT DEFAULT 0;
DECLARE x INT DEFAULT 0;
IF list IS NULL THEN
SET list = '';
END IF;
traversing:
LOOP
SET strLen = CHAR_LENGTH( list );
SELECT price INTO x FROM items WHERE id = SUBSTRING_INDEX( list, ',', 1 );
SET totalSum = totalSum + x;
SET subStrLen = CHAR_LENGTH( SUBSTRING_INDEX( list, ',', 1 ) ) + 2;
SET list = MID( list, subStrLen, strLen );
IF list = '' THEN
LEAVE traversing;
END IF;
END LOOP traversing;
RETURN totalSum;
END
并用新功能重写查询
SELECT id, calcSum(s.items) AS total_price
FROM `sets` AS s
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.