gpt4 book ai didi

mysql - SQL 如何对多个表使用 SUM 和 Group By?

转载 作者:行者123 更新时间:2023-11-29 06:51:08 26 4
gpt4 key购买 nike

我有三张 table 。

对于每个“id”值,我想要分别列出的 col1 值的总和、col2 值的总和以及 col3 值的总和。我不会跨表求和。

table a
num | id | col1
================
1 100 0
2 100 1
3 100 0

1 101 1
2 101 1
3 101 0

table b
idx | id | col2
=================
1 100 20
2 100 20
3 100 20

4 101 100
5 101 100

table c
idx | id | col3
==============================
1 100 1
2 100 1
3 100 1

4 101 10
5 101 1

我希望结果看起来像这样,

ID | sum_col1 | sum_col2 | sum_col3
====================================
100 1 60 3
101 2 200 11

这是我的查询,它运行时间太长然后超时。我的表大约有 25,000 行。

SELECT a.id as id,
SUM(a.col1) as sum_col1,
SUM(b.col2) as sum_col2,
SUM(c.col3) as sum_col3
FROM a, b, c
WHERE a.id=b.id
AND a=id=c.id
GROUP by id
Order by id desc

每个表中的行数可能不同,但每个表中“id”值的范围是相同的。

这似乎是一个类似的问题,但我无法使其发挥作用,

Mysql join two tables sum, where and group by

最佳答案

这是基于您的数据的解决方案。您的查询的问题是您在非唯一列上连接表,从而产生笛卡尔积。

数据

DROP TABLE IF EXISTS A;

CREATE TABLE A
(num int,
id int,
col1 int);

INSERT INTO A VALUES (1, 100, 0);
INSERT INTO A VALUES (2, 100, 1);
INSERT INTO A VALUES (3, 100, 0);
INSERT INTO A VALUES (1, 101, 1);
INSERT INTO A VALUES (2, 101, 1);
INSERT INTO A VALUES (3 , 101, 0);

DROP TABLE IF EXISTS B;

CREATE TABLE B
(idx int,
id int,
col2 int);

INSERT INTO B VALUES (1, 100, 20);
INSERT INTO B VALUES (2, 100, 20);
INSERT INTO B VALUES (3, 100, 20);
INSERT INTO B VALUES (4, 101, 100);
INSERT INTO B VALUES (5, 101, 100);

DROP TABLE IF EXISTS C;

CREATE TABLE C
(idx int,
id int,
col3 int);

INSERT INTO C VALUES (1, 100, 1);
INSERT INTO C VALUES (2, 100, 1);
INSERT INTO C VALUES (3, 100, 1);
INSERT INTO C VALUES (4, 101, 10);
INSERT INTO C VALUES (5, 101, 1);

解决方案

SELECT a_sum.id, col1_sum, col2_sum, col3_sum
FROM (SELECT id, SUM(col1) AS col1_sum
FROM a
GROUP BY id ) a_sum
JOIN
(SELECT id, SUM(col2) AS col2_sum
FROM b
GROUP BY id ) b_sum
ON (a_sum.id = b_sum.id)
JOIN
(SELECT id, SUM(col3) AS col3_sum
FROM c
GROUP BY id ) c_sum
ON (a_sum.id = c_sum.id);

结果符合预期

enter image description here

注意:如果 id 不必出现在所有三个表中,则执行外连接。

关于mysql - SQL 如何对多个表使用 SUM 和 Group By?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47417596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com