我试图通过 Company_Name 使用此数据集总结每个 Wing_Name 的每个员工(总和)和 QA_Score(平均值)的 Date_Time 的最后值:
+--------------+-----------+------------------+-----------+----------+
| 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 |
+--------------+-----------+------------------+-----------+----------+
期望的输出是:
+--------------+-----------+----------+
| Company_Name | Employees | QA_Score |
+--------------+-----------+----------+
| Company A | 136 | 4 |
| 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";
所需的输出现在应该是 Company_Name 的员工通过每个 Wing_name 的结果的总和,以及相应 Wing_Name 的 QA_Score 平均值,但汇总在 Company_Name 下
所需的输出遵循以下逻辑:
- 公司 A 和 Wing A 员工的上次 Date_Time 值为 84。
- 公司 A 和翼楼 B 的员工的上次日期时间值为 52。
- 截至上一个 Date_Time,公司 A 有 84+52 名员工 (136) 检索。
- 公司 A 和 Wing A 的 QA_Score 的最后 Date_Time 值为 3.7。
- 公司 A 和 Wing B 的 QA_Score 的最后一个 Date_time 值为 4.3。
- 公司 A 的平均 QA_Score 为 4.0
- B公司员 worker 数为88人
- B公司平均QA_Score 3.8
这一定是我缺少的简单东西? 提前谢谢你。
最佳答案
您需要在子查询中同时按 company_name
和 wing_name
进行分组,然后仅按 company_name
对主查询进行分组以合并行被选中。
SELECT t1.company_name, SUM(t1.employees) AS employees, AVG(t1.qa_score) AS qa_score
FROM table AS t1
JOIN (SELECT company_name, wing_name, MAX(date_time) AS maxtime
FROM table
GROUP BY company_name, wing_name) AS t2
ON t1.company_name = t2.company_name AND t1.wing_name = t2.wing_name AND t1.date_time = t2.maxtime
GROUP BY t1.company_name
关于MySQL:Max Date(),汇总单独列的最后日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51312521/