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 |