Mysql 比较一个表中字段的值与另一个表中多个字段的总和
我有两张桌子Mysql 比较一个表中字段的值与另一个表中多个字段的总和,mysql,sql,join,Mysql,Sql,Join,我有两张桌子 包装表:包装ID,数量 交易记录表:transactionid、packageid、数量 无论何时获得“包裹”,都会在“交易”表中输入一个条目以及获得的数量。可以执行多个“事务”,当完全获取包时,该包的所有事务的总和应等于包表中该包的数量 我想写一条SQL语句来检查是否未完全获取特定的packageid,即: 未执行任何交易 已执行交易,但所有交易的数量总和 交易记录少于数据包表中的数量 我怎样才能做到这一点?我尝试使用的每一个join都只针对第2个,但不考虑没有事务的包 我试
- 包装表:包装ID,数量
- 交易记录表:transactionid、packageid、数量
包裹
”,都会在“交易
”表中输入一个条目以及获得的数量。可以执行多个“事务”
,当完全获取包时,该包的所有事务的总和应等于包表中该包的数量
我想写一条SQL语句来检查是否未完全获取特定的packageid,即:
从package.packageid=transactions.packageid其中package.quantity>sum(transactions.quantity)
还尝试了左连接,但不起作用。理想情况下,我希望在结果的左表中列出所有包,必要时在右表中显示空值如果您希望包括没有事务的包,则需要。这将保留结果中的所有包,并匹配存在事务的事务 然后您需要
打包.packageid
,这样您的sum
操作只对属于某个packageid
的交易
记录有效
然后使用一个类似于where子句的子句,它只适用于聚合函数,如sum
select
p.packageid,
p.quantity,
sum(t.quantity) as transaction_sum
from
packages p
left outer join transactions t on (t.packageid = p.packageid)
group by
p.packageid,
p.quantity
having
coalesce(sum(t.quantity), 0) != p.quantity
;
合并只是说,“取第一个非空值。”因此,如果sum(t.quantity)
返回null
,那么它将使用0
。这将确保结果集中包含具有数量但没有事务的包
我建议你仔细阅读一下小组讨论的内容。在使用sql时,它们是必不可少的。本质上,GROUPBY会根据数据的共同标准将数据拆分为多个组。然后根据组的质量筛选出某些结果。如果要包括没有事务的包,则需要。这将保留结果中的所有包,并匹配存在事务的事务 然后您需要
打包.packageid
,这样您的sum
操作只对属于某个packageid
的交易
记录有效
然后使用一个类似于where子句的子句,它只适用于聚合函数,如sum
select
p.packageid,
p.quantity,
sum(t.quantity) as transaction_sum
from
packages p
left outer join transactions t on (t.packageid = p.packageid)
group by
p.packageid,
p.quantity
having
coalesce(sum(t.quantity), 0) != p.quantity
;
合并只是说,“取第一个非空值。”因此,如果sum(t.quantity)
返回null
,那么它将使用0
。这将确保结果集中包含具有数量但没有事务的包
我建议你仔细阅读一下小组讨论的内容。在使用sql时,它们是必不可少的。本质上,GROUPBY会根据数据的共同标准将数据拆分为多个组。然后根据组的质量筛选出某些结果。
从package.packageid=transactions.packageid的package join事务中选择package.packageid、package.quantity、sum(transactions.quantity)
也尝试了左连接,但不起作用。理想情况下,我希望左表中列出的所有包都具有右表中的空值,其中neeeded@AbcdfpqVpn把它放到问题中。从package.packageid=transactions.packageid其中package.quantity>sum(transactions.quantity)上的包联接事务中选择package.packageid、package.quantity、sum(transactions.quantity)
也尝试了左联接,但不起作用。理想情况下,我希望左表中列出的所有包都具有右表中的空值,其中neeeded@AbcdfpqVpn把它放在问题里。这个。。你能解释最后两行吗?他们是如何帮助实现这一结果的?thanks@AbcdfpqVpn另外,如果这个答案对你有帮助,你介意打一下我答案左边的“接受”复选标记吗。除了给你我增加一点代表性,这让未来的读者知道这个答案解决了你的问题。。你能解释最后两行吗?他们是如何帮助实现这一结果的?thanks@AbcdfpqVpn另外,如果这个答案对你有帮助,你介意打一下我答案左边的“接受”复选标记吗。除了给你我增加一点代表性,这让未来的读者知道这个答案解决了你的问题。