繁体   English   中英

MySQL:加入很多:在两个表中选择总和

[英]MySQL: Join to many: select sums in both tables

我有以下问题。 我想在查询中加入一个表。 该表有多条记录。 现在,我想要主表中列的总和,以及连接表中列的总和。 这会导致问题,因为主表中列的总和现在不正确(因为我连接到多行)。

| id | date       | campaign_id | sessions |
|----|------------|-------------|----------|
| 1  | 2019-07-01 | 1           | 10       |
| 2  | 2019-07-02 | 1           | 20       |

加入表:

| id | some_var | campaign_id | some_other_metric |
|----|----------|-------------|-------------------|
| 1  | a        | 1           | 100               |
| 2  | b        | 1           | 200               |
| 3  | c        | 1           | 300               |

查询:

select table_a.campaign_id, SUM(table_a.sessions), SUM(table_b.some_other_metric)
FROM table_a
left join table_b ON table_a.campaign_id = table_b.campaign_id)
group by table_a.campaign_id

我正在寻找以下结果:

| campaign_id | SUM(table_a.sessions) | SUM(table_b.some_other_metric) |
|-------------|-----------------------|--------------------------------|
| 1           | 30                    | 600                            |

SUM(table_a.sessions) = 30
SUM(table_b.some_other_metric) = 600

但我得到了其他结果:

SUM(table_a.sessions) = 90
SUM(table_b.some_other_metric) = 1200

是否有不同的方法来连接此表以获得结果?

提前致谢。

一种简单的方法是使用单独的子查询来聚合两个表中每个表中的总和:

SELECT
    a.campaign_id,
    COALESCE(a.sessions_sum, 0) AS session_sum,
    COALESCE(b.other_sum, 0) AS other_sum
FROM
(
    SELECT campaign_id, SUM(sessions) AS sessions_sum
    FROM table_a
    GROUP BY campaign_id
) a
LEFT JOIN
(
    SELECT campaign_id, SUM(some_other_metric) AS other_sum
    FROM table_b
    GROUP BY campaign_id
) b
    ON a.campaign_id = b.campaign_id;

上述方法有任何潜在的缺陷campaign_id 出现在table_b会从结果集中被丢弃。 但是,它并不比你目前的左连接方法差。 理想情况下,您可以使用第三个表,其中包含您希望在结果集中显示的所有campaign_id值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM