【问题标题】:How to use group by with left and inner join in a same query?如何在同一个查询中使用带有左连接和内连接的分组?
【发布时间】:2017-01-11 10:06:08
【问题描述】:

我正在使用带有内连接和左连接的查询从 3 个表中获取数据。我也想通过使用 matname 来使用组。因为同一个 matname 会有多个输出。我想得到它们的总和。

表 tbl_sales

+------------+--------------+---------------+----------+--------+---------+
| 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_mas_material

+---------+--------------+--------+
| matnum  | matname      | matgrp | 
+---------+--------------+--------+
| 2000011 | name1        | FG0001 | 
| 2000012 | name2        | FG0001 |  
| 2000013 | name3        | FG0001 |    
| 2000014 | name4        | FG0001 |   
| 2000015 | name5        | FG0001 |    
+---------+--------------+--------+

表 tbl_mas_customer

+---------+----------+--------+
| customer| rep      | namez  | 
+---------+----------+--------+
| 2000011 | 501      | ddd    | 
| 2000012 | 502      | bbb    |  
| 2000013 | 501      | zzz    |    
| 2000014 | 501      | qqq    |   
| 2000015 | 503      | ttt    |    
+---------+----------+--------+

我想获取特定代表已售出的特定材料组(matgrp)的数量(qty_ach)及其名称(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'

但我想使用 ma​​tname 对它们进行分组,因为我想使用同名材料获得 qty_ach 的总和。但是,如果我最后按 matname 添加组,它不会给我正确的输出以及 qty_ach 的总和

没有分组

    {"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 。使用 group by 后它只给了我 22 个。但我想要它们的总和(matname为null):22+38+11+11+22+5-5+7 = 111

【问题讨论】:

  • @krishnpatel。没有兄弟,我想使用 matname 进行分组。不是客户。顺便说一句,我根据你的测试。这也不起作用
  • @krishnpatel 因为该表具有代表(代表 ID“501/502/....”)
  • 是的,这就是我所等待的:对意外行为的清晰描述。你必须明白,我们不是读心者,我们不知道你在追求什么,除非你向我们描述它。在这种特殊情况下,我确实设法猜到了这个问题,但你不应该依赖这个。下次请提供对问题所在的有意义的描述。
  • @Shadow 。对于那个很抱歉。我会接受你的回答。有效 。谢谢。

标签: mysql join


【解决方案1】:

好吧,我在这里猜测是因为您没有分享确切的预期输出。但是,基于您写的您想要“获取 qty_ach 的总和”的事实,并且在当前输出中 qty_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

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    相关资源
    最近更新 更多