提问者:小点点

连接表中的列和SQL PHP不工作[重复]


我正在尝试计算并从表table_two中获得列count的和。我试图通过left join函数获取列的和。但是它不能正常工作,我得到的列的和行的次数存在于table_two中。

我在left join的union表中不是很好,你能帮助我如何在我的代码中使用union函数吗。我展示了这个StackOverflow上的多个线程,但相信我,它很难理解,而且非常大。这就是为什么我在这里做了一个小桌子的帮助和容易理解。

先生,请帮我别把它标为重复和关闭的。我尝试了过去的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
--------------------------------------------------

需要输出:

|  ID  | product_key       |  product_name  |  qty  | count |
|------|-------------------|---------------------------------
|  1   | 123456789         |  XYZ           |  150  |  35   | 
-------------------------------------------------------------

共2个答案

匿名用户

您还没有对正在使用的数据库进行标记,但是,从每个数据库获取聚合的一种方法是使用apply

我还建议您修改ProductId命名约定中的不一致之处,您将其称为PRODUCT_CODEPRODUCT_KEYPRODUCT_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

另一种方法是简单地连接表,并按每个产品的列分组,然后聚合数量。

select p.product_ids as product_key, p.product_name, Coalesce(Sum(q.Qty),0) TotalQty, Coalesce(Sum(c.[count]),0) [count]
from product_table p
left join table_one t1 on t1.product_key=p.product_ids
left join table_two t2 on t2.product_code=p.product_ids
group by p.product_ids, p.product_name

匿名用户

您向我们显示的查询不起作用。

如果您希望通过使用聚合函数(如SUM())来汇总/滚动/您的数据,最好是在不使用这些函数的情况下运行查询。例如:

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显示在所有三行中。