繁体   English   中英

MySQL:选择一个组的Last Max()值,但由另一个组汇总

[英]MySQL: Select Last Max() Value of One Group But Summarize by Another Group

我正在尝试使用此数据集按雇员和QA_Score的Date_Time的最后值列出Company_Name:

+--------------+-----------+------------------+-----------+----------+
| Company_Name | Wing_Name |    Date_Time     | Employees | QA_Score |
+--------------+-----------+------------------+-----------+----------+
| Company A    | Wing A    | 06/08/2018 13:00 |        82 | 3.5      |
| Company A    | Wing A    | 06/08/2018 13:01 |        83 | 3.6      |
| Company A    | Wing A    | 06/08/2018 13:02 |        84 | 3.7      |
| Company B    | Wing A    | 06/08/2018 14:00 |        82 | 3.6      |
| Company B    | Wing A    | 06/08/2018 14:01 |        85 | 3.7      |
| Company B    | Wing A    | 06/08/2018 14:02 |        88 | 3.8      |
+--------------+-----------+------------------+-----------+----------+

所需的输出应为:

+--------------+-----------+----------+
| Company_Name | Employees | QA_Score |
+--------------+-----------+----------+
| Company A    |        84 | 3.7      |
| Company B    |        88 | 3.8      |
+--------------+-----------+----------+

我已经成功地使用以下代码显示了Wing_Name的Date_Time的最后结果,但是我一生都无法为Company_Name找出它,而将Wing_Name排除在输出之外。

SELECT * FROM table
WHERE (Wing_Name, Date_Time) IN
(SELECT Wing_Name, MAX(Date_Time) Date_Time FROM table GROUP BY Wing_Name)
AND `Company_Name` = "Company A";

这一定是我想念的简单事情吗? 先感谢您。

编辑:

我相信我可能没有正确地问过我的问题,并且出于Wing_Name和输出意图的目的,已经改进了数据集列表以提供更多颜色:

+--------------+-----------+------------------+-----------+----------+
| Company_Name | Wing_Name |    Date_Time     | Employees | QA_Score |
+--------------+-----------+------------------+-----------+----------+
| Company A    | Wing A    | 06/08/2018 13:00 |        82 | 3.5      |
| Company A    | Wing A    | 06/08/2018 13:01 |        83 | 3.6      |
| Company A    | Wing A    | 06/08/2018 13:02 |        84 | 3.7      |
| Company A    | Wing B    | 06/08/2018 13:00 |        50 | 4.1      |
| Company A    | Wing B    | 06/08/2018 13:01 |        51 | 4.2      |
| Company A    | Wing B    | 06/08/2018 13:02 |        52 | 4.3      |
| Company B    | Wing A    | 06/08/2018 14:00 |        82 | 3.6      |
| Company B    | Wing A    | 06/08/2018 14:01 |        85 | 3.7      |
| Company B    | Wing A    | 06/08/2018 14:02 |        88 | 3.8      |
+--------------+-----------+------------------+-----------+----------+

通过此编辑,现在期望的输出应该是每个Wing_name的结果的Company_Name雇员的总和,以及相应Wing_Name的QA_Score的平均值,但汇总在Company_Name下

使用上面的新修订数据集,所需的输出应为:

  • 公司A和部门A的雇员的上次Date_Time值为84。
  • A公司和B部门员工的上次Date_Time值为52。
  • 截至上次Date_Time检索,公司A有84 + 52名员工(136)。
  • A公司和Wing A的QA_Score的最后一个Date_Time值为3.7。
  • A公司和B部门的QA_Score的最后一个Date_time值为4.3。
  • 公司A公司的平均QA_得分为4.0
 +--------------+-----------+----------+ | Company_Name | Employees | QA_Score | +--------------+-----------+----------+ | Company A | 136 | 4 | | Company B | 88 | 3.8 | +--------------+-----------+----------+ 

我想您只需要添加公司名称:

SELECT t.*
FROM table t
WHERE (Company_name, Wing_Name, Date_Time) IN
        (SELECT CompanyName, Wing_Name, MAX(Date_Time) Date_Time
         FROM table
         GROUP BY Company_Name, Wing_Name
        );

使用与现有sql类似的逻辑:

SELECT * FROM table
WHERE (Company_Name, Date_Time) IN
(SELECT Company_Name, MAX(Date_Time) Date_Time FROM table GROUP BY Company_Name);

或使用相关子查询:

SELECT * 
FROM table t1
WHERE Date_Time = (SELECT Max(Date_Time) FROM Table WHERE t1.Company_Name = Company_Name);

或未解决的解决方案...

SELECT x.* 
  FROM my_table x 
  JOIN
     ( SELECT company_name
            , wing_name
            , MAX(date_time) dt 
         FROM my_table 
        GROUP 
           BY company_name
            , wing_name
     ) y
    ON y.company_name = x.company_name 
   AND y.wing_name = x.wing_name 
   AND y.dt = x.date_time;

您可以将子查询与GROUP BYSUMAVG一起使用,请参见下面的代码,并且sqlfiddle示例已更新:

 select Company_Name,sum(Employees),avg(QA_Score) from Table1 where (Company_Name,Date_Time) 
    in (
    select Company_Name,Max(Date_Time)  from Table1 group by Company_Name  
    )
    group by Company_Name

这是一个sqlfiddle示例: https ://www.db-fiddle.com/f/27SuaGjL3SKfxhvqRRWUdd/3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM