连接表SQL PHP中列的总和不起作用[重复]
Posted
技术标签:
【中文标题】连接表SQL PHP中列的总和不起作用[重复]【英文标题】:The SUM of column in Join table SQL PHP not working [duplicate] 【发布时间】:2021-06-17 15:58:52 【问题描述】:我正在尝试从表 table_two
中计算并获取列 count
的总和。我正在尝试通过Left Join
函数获取并获取列的总和。但它无法正常工作,并且我得到的列的总和存在于table_two
中。
我在left JOIN
的联合表中并不完美,请您帮助我了解如何在我的代码中使用联合函数。
我在这个 *** 上展示了多个线程,但相信我这很难理解而且非常大。这就是为什么我在这里制作一张小桌子以寻求帮助并且易于理解。
先生,请帮我不要将其标记为重复和关闭。我正在尝试过去 1 周,但没有代码工作。
我正在尝试的代码是 -
SELECT *, SUM(table_two.count) AS totalQTY, SUM(table_one.qty) AS totalReqQty
FROM table_one
LEFT JOIN table_two
ON table_one product_key = product_code
LEFT JOIN product_table
ON table_two.product_code = product_table.product_ids
table_one
| ID | product_key | insert_date | qty
|------|------------------|--------------|------
| 1 | 123456789 | 2021-02-01 | 150
------------------------------------------------
table_two
| ID | product_code | add_date | count
|------|-------------------|--------------|-------
| 1 | 123456789 | 2021-02-02 | 10
| 2 | 123456789 | 2021-02-03 | 20
| 3 | 123456789 | 2021-02-04 | 5
--------------------------------------------------
product_table
| ID | product_ids | product_name
|------|-------------------|----------------------
| 1 | 123456789 | XYZ
--------------------------------------------------
Expecting Output:
| ID | product_key | product_name | qty | count |
|------|-------------------|---------------------------------
| 1 | 123456789 | XYZ | 150 | 35 |
-------------------------------------------------------------
【问题讨论】:
【参考方案1】:您尚未标记您正在使用的数据库,但是从每个数据库获取聚合的一种方法是使用 apply
。
我还建议您修改 ProductId 命名约定中的不一致之处,您将其称为 product_code
和 product_key
和 product_ids
。决定如何称呼它并保持一致会让其他人更容易理解。
select p.product_ids as product_key, p.product_name, coalesce(q.Qty,0) totalQty, coalesce(c.[count],0) [Count]
from product_table p
outer apply (
select sum(qty) Qty
from table_one t1
where t1.product_key=p.product_ids
group by t1.product_key
)q
outer apply (
select Sum(count) [count]
from table_two t2
where t2.product_code=p.product_ids
group by t2.product_code
)c
【讨论】:
[
意外字符错误
OQ 使用 mysql。这个[]
的东西是 SQL Server。【参考方案2】:
query you showed us 不起作用。
如果您想通过使用 aggregate functions(如 SUM())来汇总/汇总/您的数据,最好的办法是在没有它们的情况下运行查询。 For example
SELECT *
FROM table_one
LEFT JOIN table_two
ON table_one.product_key = table_two.product_code
LEFT JOIN product_table
ON table_two.product_code = product_table.product_ids
你得到这个结果。请注意,它有三行,并且数量150
显示在所有三行中。
ID | product_key | insert_date | qty | ID | product_code | add_date | count | ID | product_ids | product_name |
---|---|---|---|---|---|---|---|---|---|---|
1 | 123456789 | 2021-02-01 | 150 | 1 | 123456789 | 2021-02-02 | 10 | 1 | 123456789 | XYZ |
1 | 123456789 | 2021-02-01 | 150 | 2 | 123456789 | 2021-02-03 | 20 | 1 | 123456789 | XYZ |
1 | 123456789 | 2021-02-01 | 150 | 3 | 123456789 | 2021-02-04 | 5 | 1 | 123456789 | XYZ |
然后,请记住,当您汇总多行时,这些行中的详细信息(例如,table_1.ID
)不再有意义。三行加起来你要哪个ID?
所以你可以something like this
SELECT table_one.product_key,
SUM(table_two.count) totalQty,
SUM(table_one.qty) totalReqQty
FROM table_one
LEFT JOIN table_two
ON table_one.product_key = table_two.product_code
LEFT JOIN product_table
ON table_two.product_code = product_table.product_ids
GROUP BY table_one.product_key
这给出了这个结果,这是不正确的——它是table_one.qty
的三倍和。您的 table_one
和 table_two
的 JOIN 导致了组合爆炸。
product_key | totalQty | totalReqQty |
---|---|---|
123456789 | 35 | 450 WRONG! |
因此,您需要了解的是,您的***FROM table_one ... JOIN table_two ... JOIN product_table...
模式需要在table_one
、table_two
和product_table
中为每个产品连接一行。在此设置中,您可以使用 product_table
。每个产品都有一行。
但其他表的每个产品可以有多行。所以你需要在子查询中对它们求和,然后加入子查询like this。
SELECT product_table.product_ids,
table_two_summary.totalQty,
table_one_summary.totalReqQty
FROM product_table
LEFT JOIN (
SELECT product_code, SUM(count) totalQty
FROM table_two
GROUP BY product_code
) table_two_summary
ON product_table.product_ids = table_two_summary.product_code
LEFT JOIN (
SELECT product_key, SUM(qty) totalReqQty
FROM table_one
GROUP BY product_key
) table_one_summary
ON product_table.product_ids = table_one_summary.product_key
编辑如果您需要对汇总列进行过滤,您可以这样做like this。
SELECT product_table.product_ids,
table_two_summary.totalQty,
table_one_summary.totalReqQty
FROM product_table
LEFT JOIN (
SELECT product_code, SUM(count) totalQty
FROM table_two
GROUP BY product_code
) table_two_summary
ON product_table.product_ids = table_two_summary.product_code
LEFT JOIN (
SELECT product_key, SUM(qty) totalReqQty
FROM table_one
GROUP BY product_key
) table_one_summary
ON product_table.product_ids = table_one_summary.product_key
WHERE table_one_summary.totalReqQty > table_two_summary.totalQty
查看子查询如何分别汇总两个不同的表。如果你加入他们并总结他们,你会多次计算一些行。
【讨论】:
你让我开心,但是当我使用where
条件和此代码 sum(table_one.qty) > sum(table_two.count)
时,它不起作用
请看我的编辑。而且,恕我直言,“不工作”并不是一个有意义的陈述。它可能意味着从“给出不正确的结果”到“抛出语法错误”到“让我的服务器着火并烧毁我的数据中心”。如果您检查代码错误并尝试给出更有意义的解释,您将获得技能。
但它不起作用table_one_summary.product_key
不保存
请解决这个问题
但是您的代码显示空值https://www.db-fiddle.com/f/xd4rax25LYQQFRfxGv7erN/5
请查看您的 db_fiddle 并帮助我们改进这一点以上是关于连接表SQL PHP中列的总和不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Informatica Cloud DB2 for i cdc 连接类型 SQL 覆盖不起作用
NativeQuery 删除重复的 Oracle SQL Db 表条目不起作用(参见代码)