Mysql left Join - 两列之和错误
Mysql left Join - sum of two columns is error
我有两个table,
TABLE一个项Table
| id | user | task_date |count|
|----|----------|------------|-----|
| 1 | king | 2020-08-01 | 100 |
| 2 | king | 2020-08-02 | 300 |
| 3 | king | 2020-08-04 | 50 |
| 4 | king | 2020-08-03 | 90 |
| 5 | king | 2020-08-05 | 70 |
| 6 | king | 2020-08-06 | 20 |
| 7 | king | 2020-08-07 | 20 |
| 8 | king | 2020-08-08 | 220 |
| 9 | king | 2020-08-09 | 30 |
| 10 | king | 2020-08-04 | 40 |
TableB错误table
| id | user | dev_date |error_count|
|----|----------|------------|-----------|
| 25 | king | 2020-08-01 | 10 |
| 22 | king | 2020-08-02 | 10 |
| 20 | king | 2020-08-04 | 20 |
预期输出
| SumOfCount| SumOfError|
|-----------|-----------|
| 940 |40 |
我试过了
select
sum(a.count),sum(b.error_count)
from entry_table a
LEFT JOIN error_table b ON a.user = b.user
where a.user = "king" and a.task_date between '2020-08-01' and '2020-08-31' and b.dev_date between '2020-08-01' and '2020-08-31'
显示的金额无效。我哪里弄错了?
您在两个表之间有很多可能的关系,因为 SumOfCount
将增加 3 倍,而 SumOfError
将增加 10 倍,因为您首先加入然后聚合。但是在这里你必须先做反向聚合然后加入
这样试试
select
a.SumOfCount, b.SumOfError
from (
select user, sum(count) SumOfCount
from entry_table where user='king' and task_date between '2020-08-01' and '2020-08-31'
) a left join
(
select user, sum(error_count) SumOfError
from error_table where user='king' and dev_date between '2020-08-01' and '2020-08-31'
) b on a.user=b.user
我有两个table,
TABLE一个项Table
| id | user | task_date |count|
|----|----------|------------|-----|
| 1 | king | 2020-08-01 | 100 |
| 2 | king | 2020-08-02 | 300 |
| 3 | king | 2020-08-04 | 50 |
| 4 | king | 2020-08-03 | 90 |
| 5 | king | 2020-08-05 | 70 |
| 6 | king | 2020-08-06 | 20 |
| 7 | king | 2020-08-07 | 20 |
| 8 | king | 2020-08-08 | 220 |
| 9 | king | 2020-08-09 | 30 |
| 10 | king | 2020-08-04 | 40 |
TableB错误table
| id | user | dev_date |error_count|
|----|----------|------------|-----------|
| 25 | king | 2020-08-01 | 10 |
| 22 | king | 2020-08-02 | 10 |
| 20 | king | 2020-08-04 | 20 |
预期输出
| SumOfCount| SumOfError|
|-----------|-----------|
| 940 |40 |
我试过了
select
sum(a.count),sum(b.error_count)
from entry_table a
LEFT JOIN error_table b ON a.user = b.user
where a.user = "king" and a.task_date between '2020-08-01' and '2020-08-31' and b.dev_date between '2020-08-01' and '2020-08-31'
显示的金额无效。我哪里弄错了?
您在两个表之间有很多可能的关系,因为 SumOfCount
将增加 3 倍,而 SumOfError
将增加 10 倍,因为您首先加入然后聚合。但是在这里你必须先做反向聚合然后加入
这样试试
select
a.SumOfCount, b.SumOfError
from (
select user, sum(count) SumOfCount
from entry_table where user='king' and task_date between '2020-08-01' and '2020-08-31'
) a left join
(
select user, sum(error_count) SumOfError
from error_table where user='king' and dev_date between '2020-08-01' and '2020-08-31'
) b on a.user=b.user