Mysql SQL查询联接(从不同表创建组合总和视图)

Mysql SQL查询联接(从不同表创建组合总和视图),mysql,sql,join,subquery,Mysql,Sql,Join,Subquery,嗨,我需要一个关于这个问题的帮助。我想创建一个视图,在其中显示已购买和已出售项目的摘要 这些是我的桌子: **tblfruit** ID Name 1 Apple 2 Orange 3 mango **tblpurchaseditems** ID fruit_id qty amount 1 1 3 75 2 1

嗨,我需要一个关于这个问题的帮助。我想创建一个视图,在其中显示已购买和已出售项目的摘要

这些是我的桌子:

**tblfruit**
 ID       Name
 1        Apple
 2        Orange
 3        mango


 **tblpurchaseditems**
ID      fruit_id        qty   amount
1         1             3      75
2         1             2      50
3         2             1      10
4         3             3      30

**tblsolditems**
ID      fruit_id        qty   amount
1         1             2      150
2         1             2      350
3         2             1      50
4         3             2      230
5         3             1      120
我想要输出:

 **tblsummary**
ID      fruit_id        totalqtypurchased totalamountpurchased  totalqtysold  totalamountsold
1         1                 5                    125                4             500
2         2                 1                    10                 1             50
3         3                 3                    30                 3             350

所以有两种方法可以做到这一点,在线或使用连接

内联: 选择名称,从表B中选择sumqty作为totalqty 从表格

加入: 选择a.name、sumb.qty作为totalqty 从表a 加入表b 在b.itemid=a.itemid上 按名称分组


对于多个表,由于重复,使用连接可能会变得更加棘手,因此对于较小的查询,内联查询在这里可以更好地工作。

来自示例数据和预期结果

select a.fruit_id,sum(b.qty),sum(b.amount),sum(c.qty),sum(c.amount) 
from tblfruit a,tblpurchaseditems b,tblsolditems c 
where a.fruit_id=b.fruit_id and a.fruit_id=c.fruit_id
group by a.fruit_id
您可以尝试联合所有以合并tblpurchaseditems和tblpurchaseditems表,并使grp成为两个结果集。然后使用条件聚合函数来获得预期结果

CREATE TABLE tblpurchaseditems(
   ID INT,
   fruit_id INT,
   qty INT,
   amount INT
);

INSERT INTO tblpurchaseditems VALUES (1,1,3,75);
INSERT INTO tblpurchaseditems VALUES (2,1,2,50);
INSERT INTO tblpurchaseditems VALUES (3,2,1,10);
INSERT INTO tblpurchaseditems VALUES (4,3,3,30);

CREATE TABLE tblsolditems(
   ID INT,
   fruit_id INT,
   qty INT,
   amount INT
);


INSERT INTO tblsolditems VALUES (1,1,2,150);
INSERT INTO tblsolditems VALUES (2,1,2,350);
INSERT INTO tblsolditems VALUES (3,2,1,50);
INSERT INTO tblsolditems VALUES (4,3,2,230);
INSERT INTO tblsolditems VALUES (5,3,1,120);
问题1:

:

我将在表中使用列itemGroup,它可以表示哪种类型

1平均采购量 2平均溶质 这将不需要使用UNIONALL来组合两个表,更合理

因此,在表中,模式将如下所示

CREATE TABLE tblitems(
       ID INT,
       fruit_id INT,
       qty INT,
       amount INT,
       itemGroup INT
);


INSERT INTO tblitems VALUES (1,1,3,75,1);
INSERT INTO tblitems VALUES (2,1,2,50,1);
INSERT INTO tblitems VALUES (3,2,1,10,1);
INSERT INTO tblitems VALUES (4,3,3,30,1);



INSERT INTO tblitems VALUES (1,1,2,150,2);
INSERT INTO tblitems VALUES (2,1,2,350,2);
INSERT INTO tblitems VALUES (3,2,1,50 ,2);
INSERT INTO tblitems VALUES (4,3,2,230,2);
INSERT INTO tblitems VALUES (5,3,1,120,2);
问题1:

:


当您请求查询建议并使用表模式构建为SQL FIDLE时,请帮我们一个忙。否则,我们无法轻松测试我们可能建议的查询,这使得辅助的障碍相当高。作为询问者,你应该先发制人地尽可能多地工作,以有效地回答问题。首先,通常购买和出售是同义词。编辑您的问题并显示您尝试过的内容。因此,它不是一个代码编写服务。当您遇到编程问题时,我们很乐意为您提供帮助,但您至少必须尝试一下。您应该尝试自己编写代码。如果您有问题,请发布您尝试过的内容,并清楚解释哪些内容不起作用,然后提供。阅读请务必阅读和阅读。虽然此代码可以回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高答案的长期价值。
| ID | fruit_id | totalqtypurchased | totalamountpurchased | totalqtysold | totalamountsold |
|----|----------|-------------------|----------------------|--------------|-----------------|
|  1 |        1 |                 5 |                  125 |            5 |             125 |
|  2 |        2 |                 1 |                   10 |            1 |              10 |
|  3 |        3 |                 3 |                   30 |            3 |              30 |
CREATE TABLE tblitems(
       ID INT,
       fruit_id INT,
       qty INT,
       amount INT,
       itemGroup INT
);


INSERT INTO tblitems VALUES (1,1,3,75,1);
INSERT INTO tblitems VALUES (2,1,2,50,1);
INSERT INTO tblitems VALUES (3,2,1,10,1);
INSERT INTO tblitems VALUES (4,3,3,30,1);



INSERT INTO tblitems VALUES (1,1,2,150,2);
INSERT INTO tblitems VALUES (2,1,2,350,2);
INSERT INTO tblitems VALUES (3,2,1,50 ,2);
INSERT INTO tblitems VALUES (4,3,2,230,2);
INSERT INTO tblitems VALUES (5,3,1,120,2);
SELECT (@RN:=@RN+1) ID,
       fruit_id, 
       SUM(CASE WHEN  itemGroup = 1 THEN  qty END) totalqtypurchased ,
       SUM(CASE WHEN  itemGroup = 1 THEN  amount END) totalamountpurchased  ,
       SUM(CASE WHEN  itemGroup = 2 THEN  qty END) totalqtysold,
       SUM(CASE WHEN  itemGroup = 2 THEN  amount END) totalamountsold
FROM tblitems t1 CROSS JOIN (SELECT @RN:=0) v
GROUP BY fruit_id
| ID | fruit_id | totalqtypurchased | totalamountpurchased | totalqtysold | totalamountsold |
|----|----------|-------------------|----------------------|--------------|-----------------|
|  1 |        1 |                 5 |                  125 |            4 |             500 |
|  2 |        2 |                 1 |                   10 |            1 |              50 |
|  3 |        3 |                 3 |                   30 |            3 |             350 |