[英]MySQL how to sum subgroup first then sum total
我在table_1
和table_2
数据。
表格1
id id_1 num ids_2
1 3 33 666,777,888
2 3 333 6666,7777,8888
3 4 44 111,222,333
4 4 444 1111,2222,3333
table_2
id_2 num
111 1
222 2
333 3
1111 1
2222 2
3333 3
666 6
777 7
888 8
6666 6
7777 7
8888 8
我只知道如何通过两个步骤做我想做的事情:
第一个左加入获得:
SELECT t1.id_1, sum(t2.num)
FROM table_1 AS t1
LEFT JOIN table_2 AS t2
ON FIND_IN_SET(t2.id_2, t1.ids_2)
GROUP BY t1.id_1;
id_1 sum(t2.num)
3 6+7+8+6+7+8
4 1+2+3+1+2+3
然后再次与table_1左联接为sum(table_1.num)+ sum(table_2.num):
id_1 sum(table_1.num)+sum(table_2.num)
3 6+7+8+6+7+8+33+333
4 1+2+3+1+2+3+44+444
我可以只用一个SQL做到吗?
以下是您可以尝试的查询
SELECT A.id_1, sum(B.num)+sum(distinct A.num)
FROM table_1 AS A
LEFT JOIN table_2 AS B
on FIND_IN_SET(B.id_2, A.ids_2)
GROUP BY A.id_1;
从以下方面得到了启发: 如何在逗号分隔列表MySQL中计算项目
SELECT t1.id_1,
SUM(t1.num / (LENGTH(t1.ids_2) - LENGTH(REPLACE(t1.ids_2, ',', '')) + 1) + t2.num)
AS total
FROM table_1 AS t1
LEFT JOIN table_2 AS t2
ON FIND_IN_SET(t2.id_2, t1.ids_2)
GROUP BY t1.id_1;
如果没有上述除法,则结果将是:
id_1 total
3 6+7+8 + 6+7+8 + 33+33+33 + 333+333+333
4 1+2+3 + 1+2+3 + 44+44+44 + 444+444+444
通过除法,结果将是我想要的:
id_1 total
3 6+7+8 + 6+7+8 + 33/3+33/3+33/3 + 333/3+333/3+333/3
4 1+2+3 + 1+2+3 + 44/3+44/3+44/3 + 444/3+444/3+444/3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.