mysql - 基于多个条件和 JOINS 进行一对多求和

标签 mysql sql select sum

我不知道如何表达我的问题。但我有 2 个不同的表需要连接在一起才能给出结果。

Table A
--------------------------
Id  |  Field_Id |  Value
--------------------------
1234|     16    |   PO456
1234|      7    |   40
1334|     16    |   PO456
1334|      7    |   20
1246|     16    |   PO679
1246|      7    |   100
1247|     16    |   PO679
1247|      7    |   20
1247|     16    |   PO679
1247|      7    |   40


Table B
--------------
Id  |  Hours | 
--------------
1234|   2
1234|   3
1234|   4
1234|   5
1334|   8
1334|   8
1334|   8
1246|   3
1246|   3
1247|   8
1247|   8

现在我想要的结果应该是这样的。

Result
-----------------------
Value  |  Est |  Hours
-----------------------
PO456  |   60 |   38
PO679  |   160|   22

这是我的sql:

select a.value as "Id", CAST(sum(d.value) AS Decimal(10,2)) as 'Est' 
, COALESCE(sum(b.Hours),0) as "Hours"

from table_a a 
left Join table_b b ON a.Id = b.Id
inner join table_a d ON d.Id = a.Id AND d.Field_Id = '7'
where a.Field_Id =  '16' and a.value <> ' ' 
Group By a.value
ORDER BY a.value  ASC

现在我的工作时间列正确输入,但是东部列返回了奇怪的数据,比如数字少了数千。它是不是以某种方式被绑回第一列?我基本上想在一行上获得具有相同 a.value 的所有 Id 的总和。我现在的工作是它显示所有 Id,并且只有多个值,并且它被单独分解。但是,我希望它浓缩。任何援助将不胜感激。如果我的代码中有轻微的拼写错误(这不是实际的代码,该代码只是出于隐私原因重命名,我需要逻辑上的帮助)。请并谢谢您。

最佳答案

多么令人困惑的数据模型!您可以使用子查询来获取 est 值:

select a16.value, a7.value, 
       sum(b.hours)  
from table_a a16 left join
     (select a16.value,
             sum(a7.value) as est    -- should convert to a number for sum()
      from table_a a16 join
           table_a a7
           on a16.id = a7.id and a7.field_id = 7 and
              a16.field_id = 16
      group by 16.value
     ) a7
     on a16.value = a7.value
     table_b b 
     on a16.Id = b.Id
where a16.field_id = 16
group by a16.value, a7.est;

关于mysql - 基于多个条件和 JOINS 进行一对多求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58769311/

相关文章:

php - 根据 MySQL 数据库中的计数和日期获取前 5 个项目

if-statement - go - 如何使用golang goroutine,select和if语句返回?

mysql - MySQL 日志中的虚假信息

mysql - 在 MS Access 和 MySQL 之间同步数据的最佳方法是什么?

php - Laravel 中 'id' 中的未知列 'where clause' 具有自定义 'id' 属性

PHP/mySQL登录不成功

sql - 使用子查询提取随机值每次都会显示相同的值

sql - 查询和/或函数对一个字段上的所有类型的数据进行子集化并在其他字段上进行计算

MySQL - 选择 N 个不同记录所在的所有行

jQuery 选择文本并在段落中添加跨度