sql - 选择内连接返回错误结果
问题描述
我正在使用如下选择内部联接。如何获得预期的结果?
这是sql语法:
select tgr.id, tgr.venid, sum(tgrd.qty*tgrd.pri), sum(tgrp.amo)
from tgr inner join tgrd on tgr.id = tgrd.id
inner join tgrp on tgr.id = tgrp.id
where tgr.id = 3
group by tgr.id, tgr.venid
having sum(tgrd.qty*tgrd.pri)-sum(tgrp.amo)>0;
结果:
3 | 1 | 462000 | 262000
但我期待结果:
3 | 1 | 231000 | 131000
来自 3 个表:tgr、tgrd、tgrp
tgr table
id venid
3 1
tgrd table
id plu qty pri
3 2 2.7 45000
3 1 7.3 15000
tgrp table
id type amo
3 2 0
3 2 131000
任何帮助将不胜感激。
解决方案
tgr
因为从totgrd
和有多对多的关系tgrp
,所以需要在 ing 表之前执行聚合JOIN
,否则您可以对每个值进行加倍(或更多)计数。此查询将为您提供所需的结果:
select tgr.id, tgr.venid, total, amo
from tgr
inner join (select id, sum(qty*pri) as total
from tgrd
group by id) tgrd on tgr.id = tgrd.id
inner join (select id, sum(amo) as amo
from tgrp
group by id) tgrp on tgr.id = tgrp.id
where tgr.id = 3
group by tgr.id, tgr.venid
having total - amo > 0;
输出:
id venid total amo
3 1 231000.00 131000
推荐阅读
- java - 找不到对象时如何处理返回值
- python - AttributeError:“unicode”对象没有属性“get”
- python - Keras ModelCheckpoint 会在训练恢复时覆盖之前的最佳检查点
- reactjs - 如何仅隐藏垂直滚动条,但仍允许滚动?
- python - 如何有效地将 Pandas Dataframe 转换为多维 numpy 数组?
- networking - 在带有 Terraform/KVM 的 CentOS 7 上使用 Cloud-Init 设置静态 IP
- php - macOS 莫哈韦沙漠。已安装 PHP 7,但 Apache 使用 PHP 5.6.6。怎么修?
- c++ - unique_ptr < 0 或者小于运算符做什么?
- bash - Sed 命令似乎无法正确处理引号字符
- python-3.x - Flask test_client 使用 flask_restful 返回 405 错误