我有以下问题。我想在查询中加入表。该表具有多个记录。现在,我想要主表中一列的总和,以及联接表中一列的总和。这会导致问题,因为主表中的列总和现在不正确(因为我联接到多行)。
| 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句