Mysql 如何在同一查询中使用GROUPBY和left和inner join?
我使用一个带有内部联接和左联接的查询从3个表中获取数据。我还想通过使用matname来使用group。因为将有来自同一matname的多个输出。我想得到它们的总和 表tbl_销售额Mysql 如何在同一查询中使用GROUPBY和left和inner join?,mysql,join,Mysql,Join,我使用一个带有内部联接和左联接的查询从3个表中获取数据。我还想通过使用matname来使用group。因为将有来自同一matname的多个输出。我想得到它们的总和 表tbl_销售额 +------------+--------------+---------------+----------+--------+---------+ | company | customer | date | material | matgrp | qty_ach | +------
+------------+--------------+---------------+----------+--------+---------+
| company | customer | date | material | matgrp | qty_ach |
+------------+--------------+---------------+----------+--------+---------+
| 2100 | 30000002 | 2017-01-10 | 2000012 | FG0001 | 2 |
| 2200 | 30000002 | 2017-01-10 | 2000012 | FG0001 | 4 |
| 2100 | 30000003 | 2017-01-10 | 2000011 | FG0001 | 5 |
| 2100 | 30000002 | 2017-01-11 | 2000024 | FG0001 | 4 |
| 2300 | 30000004 | 2017-01-11 | 2000010 | FG0001 | 1 |
+------------+--------------+---------------+----------+--------+---------+
表tbl\U mas\U材料
+---------+--------------+--------+
| matnum | matname | matgrp |
+---------+--------------+--------+
| 2000011 | name1 | FG0001 |
| 2000012 | name2 | FG0001 |
| 2000013 | name3 | FG0001 |
| 2000014 | name4 | FG0001 |
| 2000015 | name5 | FG0001 |
+---------+--------------+--------+
表tbl\U mas\U客户
+---------+----------+--------+
| customer| rep | namez |
+---------+----------+--------+
| 2000011 | 501 | ddd |
| 2000012 | 502 | bbb |
| 2000013 | 501 | zzz |
| 2000014 | 501 | qqq |
| 2000015 | 503 | ttt |
+---------+----------+--------+
我想获得特定代表销售的特定物料组(matgrp)及其名称(matname)的数量(每个数量)
这就是我使用的查询。这给了我正确的输出
SELECT tbl_mas_material.matname, tbl_sales.qty_ach
FROM salesforce.tbl_sales
inner join salesforce.tbl_mas_customer on salesforce.tbl_mas_customer.customer = salesforce.tbl_sales.customer
left join salesforce.tbl_mas_material on salesforce.tbl_mas_material.matnum = salesforce.tbl_sales.material
where salesforce.tbl_sales.matgrp = 'FG0001'
and DATE_FORMAT(date, '%Y-%m') = '2017-01'
and salesforce.tbl_mas_customer.rep = '501'
但是我想使用matname对它们进行分组,因为我想得到使用相同名称的物料的数量之和。但如果我最后按matname添加group,它将不会给出正确的输出和数量之和
没有分组
{"feed":[
{"matname":"3.00-10 4PR SECURA NEO TL CEAT","qty_ach":"5"},
{"matname":"3.50-10 04PR SECURA NEO CEAT","qty_ach":"2"},
{"matname":"3.00-18 6PR SECURA ZOOM TL","qty_ach":"1"},
{"matname":"2.75-17 04PR SECURA ZOOM CEAT (F)","qty_ach":"17"},
{"matname":"3.00-18 06PR SECURA SPORT CEAT (R)","qty_ach":"3"},
{"matname":"100\/90-18 GRIPP TL CEAT","qty_ach":"5"},
{"matname":"100\/90-17 GRIPP TL CEAT","qty_ach":"6"},
{"matname":"2.75-18 04PR SECURA ZOOM (F)","qty_ach":"-11"},
{"matname":"3.00-17 06PR SECURA ZOOM CEAT (R)","qty_ach":"-11"},
{"matname":"3.00-17 06PR SECURA ZOOM CEAT (R)","qty_ach":"11"},
{"matname":"3.00-17 04PR GRIPP","qty_ach":"33"},
{"matname":null,"qty_ach":"22"},
{"matname":"3.00-17 06PR SECURA ZOOM CEAT (R)","qty_ach":"11"},
{"matname":"2.50-17 04PR SECURA SPORT CEAT (R)","qty_ach":"4"},
{"matname":"2.50-17 04PR SECURA ZOOM FX (F)","qty_ach":"3"},
{"matname":"2.75-17 04PR SECURA ZOOM CEAT (F)","qty_ach":"2"},
{"matname":"3.00-17 06PR SECURA ZOOM CEAT (R)","qty_ach":"22"},
{"matname":"3.00-17 06PR SECURA ZOOM CEAT (R)","qty_ach":"6"}
{"matname":"100\/90-17 SECURA ZOOM CEAT TL","qty_ach":"22"},
{"matname":"100\/90-17 SECURA ZOOM CEAT TL","qty_ach":"5"},
{"matname":"100\/90-17 SECURA ZOOM CEAT TL","qty_ach":"6"},
{"matname":"100\/90-18 6PR SECURA ZOOM TL","qty_ach":"12"},
{"matname":"3.00-18 6PR SECURA ZOOM TL","qty_ach":"4"},
{"matname":"2.75-14 06PR SECURA 275","qty_ach":"2"},
{"matname":"2.75-14 06PR SECURA 275","qty_ach":"6"},
{"matname":"2.75-17 04PR SECURA ZOOM TL","qty_ach":"10"},
{"matname":"2.75-17 04PR SECURA ZOOM TL","qty_ach":"3"},
{"matname":"2.75-17 04PR SECURA ZOOM TL","qty_ach":"27"},
{"matname":"2.75-17 04PR SECURA ZOOM TL","qty_ach":"27"},
{"matname":"3.00-17 04PR GRIPP","qty_ach":"33"},
{"matname":"3.00-17 04PR GRIPP","qty_ach":"11"},
{"matname":"100\/90-18 GRIPP TL CEAT","qty_ach":"5"},
{"matname":"120\/80-17 SECURA PULSE","qty_ach":"6"},
{"matname":"100\/90-17 GRIPP TL CEAT","qty_ach":"5"},
{"matname":null,"qty_ach":"22"},
{"matname":null,"qty_ach":"38"},
{"matname":null,"qty_ach":"11"},
{"matname":null,"qty_ach":"11"},
{"matname":null,"qty_ach":"22"},
{"matname":null,"qty_ach":"5"},
{"matname":null,"qty_ach":"-5"},
{"matname":null,"qty_ach":"7"}]}
根据tbl_mas_material.matname分组
{"feed":[{"matname":null,"qty_ach":"22"},
{"matname":"100\/90-17 GRIPP TL CEAT","qty_ach":"6"},
{"matname":"100\/90-17 SECURA ZOOM CEAT TL","qty_ach":"22"},
{"matname":"100\/90-18 6PR SECURA ZOOM TL","qty_ach":"12"},
{"matname":"100\/90-18 GRIPP TL CEAT","qty_ach":"5"},
{"matname":"120\/80-17 SECURA PULSE","qty_ach":"6"},
{"matname":"2.50-17 04PR SECURA SPORT CEAT (R)","qty_ach":"4"},{"matname":"2.50-17 04PR SECURA ZOOM FX (F)","qty_ach":"3"},
{"matname":"2.75-14 06PR SECURA 275","qty_ach":"2"},
{"matname":"2.75-17 04PR SECURA ZOOM CEAT (F)","qty_ach":"17"},
{"matname":"2.75-17 04PR SECURA ZOOM TL","qty_ach":"10"},
{"matname":"2.75-18 04PR SECURA ZOOM (F)","qty_ach":"-11"},
{"matname":"3.00-10 4PR SECURA NEO TL CEAT","qty_ach":"5"},
{"matname":"3.00-17 04PR GRIPP","qty_ach":"33"},
{"matname":"3.00-17 06PR SECURA ZOOM CEAT (R)","qty_ach":"-11"},{"matname":"3.00-18 06PR SECURA SPORT CEAT (R)","qty_ach":"3"},
{"matname":"3.00-18 6PR SECURA ZOOM TL","qty_ach":"1"},
{"matname":"3.50-10 04PR SECURA NEO CEAT","qty_ach":"2"}]}
问题是输出不是我想要的。例如,请参见matname:null。小组使用后只给了我22分。但是我想要它们的总和(matname为null):22+38+11+11+22+5-5+7=111好吧,我在这里做一个猜测,因为您没有共享准确的预期输出。但是,基于您编写的希望“获取数量总和”的事实,并且在当前输出中,未对
qty\u ach
进行求和,因此您在查询中未使用sum()
group by函数。没有这一点,MySQL无法判断您想要对该字段求和
本例中的查询类似于以下内容:
SELECT tbl_mas_material.matname, sum(tbl_sales.qty_ach) as qty_ach_sum
FROM salesforce.tbl_sales
inner join salesforce.tbl_mas_customer on salesforce.tbl_mas_customer.customer = salesforce.tbl_sales.customer
left join salesforce.tbl_mas_material on salesforce.tbl_mas_material.matnum = salesforce.tbl_sales.material
where salesforce.tbl_sales.matgrp = 'FG0001'
and DATE_FORMAT(date, '%Y-%m') = '2017-01'
and salesforce.tbl_mas_customer.rep = '501'
group by tbl_mas_material.matname
见@krishnpatel。没有兄弟,我想用matname分组。不是客户。顺便说一句,我是根据你来测试的。那也不是working@krishnpatel因为该表有rep(repid“501/502/…”),是的,这就是我一直在等待的:对意外行为的清晰描述。你必须明白,我们不是读心术的人,我们不知道你在追求什么,除非你向我们描述一下。在这个特殊的案例中,我确实猜到了问题所在,但你不应该依赖于此。下次请提供一个有意义的描述什么出了问题。@Shadow。很抱歉。我会接受你的回答。成功了。非常感谢。