如何在聚合后不将其他列包括在GROUP BY中的情况下将其他列添加到SELECT查询中?

史考特

这是我要查询的表:

EmployeeId, Salary, Date
8, 500, 2016-11-02
8, 500, 2016-09-21
8, 500, 2016-10-18
9, 500, 2016-10-18
9, 500, 2016-09-21
9, 500, 2016-11-02
10, 1000, 2016-11-02
10, 700, 2016-09-21

我想选择一个雇员列表,以及该雇员最新的薪水。对于样本数据,日期是同一日期(11-02),但不一定如此。我的查询:

SELECT EmployeeId, Salary, MAX(Date)
FROM table
GROUP BY EmployeeId. Salary
ORDER BY EmployeeId

哪个正在返回:

8, 500, 2016-11-02
9, 500, 2016-11-02
10, 700, 2016-09-21
10, 1000, 2016-11-02

我的预期输出是:

8, 500, 2016-11-02
9, 500, 2016-11-02
10, 1000, 2016-11-02

如果我没有薪水合计,那么我会得到预期的结果,但是我需要使薪水可见。有没有办法在聚合后包括它?

希伯特

在使用窗口功能之前(因为并非所有的RDBMS版本都支持它们),您需要使用内联视图来完成。

首先考虑您的需求:

  • 您需要一个由员工的最大日期和员工ID组成的数据集。
  • 您需要从表中获取原始数据,而无法通过分组来获取...

为了实现第一个目标,我们确实生成了一个内联视图(以下简称为“ B”)。然后,我们返回到基本集以检索其他所需信息;允许内部联接消除不需要的记录;并完全排除了外部查询对分组依据的需求。

SELECT A.EmployeeId, A.Salary, A.Date
FROM table A
INNER JOIN (SELECT max(date) mDate, EmployeeID 
            FROM table
            GROUP BY EmployeeID) B
  on A.EmployeeID = B.EmployeeID
 and A.Date = B.MDate
ORDER BY EmployeeId

与RDBMS一起使用时,请考虑数据集以及如何过滤这些数据集并将其重新组合在一起以实现所需的结果。对大多数(不是全部)RDBMS活动进行基于集合的处理将是最有效的。通过引入窗口函数(又称分析函数),可以在没有子查询的情况下完成集合的生成。使它们在数据分析中具有强大的功能;尽管开始时会遇到困难。

那到底ROW_NUMBER() OVER (PARTITION BY EmployeeId ORDER BY Date DESC) RN是什么呢?

它为每个遇到的新员工(分区)从1开始分配行号(降序)(因此,每个员工的最新日期的RN始终为1!)。但是,该1对查询不可用在where子句中作为操作的SQL顺序生成选择值LAST(因此where子句已经执行)。这意味着要使窗口函数达到期望的结果并限制RN = 1,您必须将其包装在子查询中,然后才能访问RN = 1,从而仅返回具有最新日期的员工的记录。由于RDBMS能够独立于分析功能执行表的生成,因此RDBMS可以同时处理它们并非常快速地提供响应。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不将源文件添加到项目的情况下使用其他包中定义的模板?

来自分类Dev

如何在休眠JPA中以多对多关系将其他列添加到joinTable中?

来自分类Dev

如何在不列出其他现有列的情况下将新列添加到MySQL表

来自分类Dev

如何从数据框中创建多个其他列并将其添加到同一数据框中

来自分类Dev

猫鼬将其他集合添加到两个聚合集合中

来自分类Dev

如何在不更改其他行的情况下将 TableRow 添加到 TableLayout

来自分类Dev

在matplotlib中,如何在不调整其他子图大小的情况下将表添加到子图

来自分类Dev

如何在不将其添加到数据库的情况下使用NSManagedObject?

来自分类Dev

如何将其他参数添加到我的Ajax回调中?

来自分类Dev

在JSSOR中,如何将其他幻灯片添加到全宽滑块?

来自分类Dev

如何将其他代理添加到中层DC / OS集群中?

来自分类Dev

在JSSOR中,如何将其他幻灯片添加到全宽滑块?

来自分类Dev

如何将其他参数添加到我的Ajax回调中?

来自分类Dev

如何通过Sass中的嵌套将其他信息添加到属性选择器?

来自分类Dev

如何将其他列添加到Rally.ui.tree.PortfolioTree

来自分类Dev

如何在缺少日期的情况下计算偏移和滚动总和而不将其添加到Pandas的数据框中?

来自分类Dev

在不将其永久添加到路径的情况下访问子文件夹中的m文件

来自分类Dev

将其他联接添加到SQL中已联接的表中

来自分类Dev

如何将其他值添加到DateEntry?

来自分类Dev

如何在不执行其他查询的情况下使图表中的计数与众不同?

来自分类Dev

搜索arraylist,从arraylist中删除项目,将其添加到其他位置

来自分类Dev

将其他类中的列表添加到C#时触发事件

来自分类Dev

使用片段将其他元素(不是ListView)添加到导航抽屉中

来自分类Dev

将其他数据添加到$ form.serialize()Ajax发布中?

来自分类Dev

WCF将其他HTTP标头添加到HTTP响应中以传输SOAP消息

来自分类Dev

将其他值添加到定义为数组的Typescript JSON密钥中

来自分类Dev

制作JS游戏,将其他对象添加到代码中

来自分类Dev

将其他文本添加到SQL中的现有字符串?

来自分类Dev

遍历数组并将其他信息添加到PHP中的项

Related 相关文章

  1. 1

    如何在不将源文件添加到项目的情况下使用其他包中定义的模板?

  2. 2

    如何在休眠JPA中以多对多关系将其他列添加到joinTable中?

  3. 3

    如何在不列出其他现有列的情况下将新列添加到MySQL表

  4. 4

    如何从数据框中创建多个其他列并将其添加到同一数据框中

  5. 5

    猫鼬将其他集合添加到两个聚合集合中

  6. 6

    如何在不更改其他行的情况下将 TableRow 添加到 TableLayout

  7. 7

    在matplotlib中,如何在不调整其他子图大小的情况下将表添加到子图

  8. 8

    如何在不将其添加到数据库的情况下使用NSManagedObject?

  9. 9

    如何将其他参数添加到我的Ajax回调中?

  10. 10

    在JSSOR中,如何将其他幻灯片添加到全宽滑块?

  11. 11

    如何将其他代理添加到中层DC / OS集群中?

  12. 12

    在JSSOR中,如何将其他幻灯片添加到全宽滑块?

  13. 13

    如何将其他参数添加到我的Ajax回调中?

  14. 14

    如何通过Sass中的嵌套将其他信息添加到属性选择器?

  15. 15

    如何将其他列添加到Rally.ui.tree.PortfolioTree

  16. 16

    如何在缺少日期的情况下计算偏移和滚动总和而不将其添加到Pandas的数据框中?

  17. 17

    在不将其永久添加到路径的情况下访问子文件夹中的m文件

  18. 18

    将其他联接添加到SQL中已联接的表中

  19. 19

    如何将其他值添加到DateEntry?

  20. 20

    如何在不执行其他查询的情况下使图表中的计数与众不同?

  21. 21

    搜索arraylist,从arraylist中删除项目,将其添加到其他位置

  22. 22

    将其他类中的列表添加到C#时触发事件

  23. 23

    使用片段将其他元素(不是ListView)添加到导航抽屉中

  24. 24

    将其他数据添加到$ form.serialize()Ajax发布中?

  25. 25

    WCF将其他HTTP标头添加到HTTP响应中以传输SOAP消息

  26. 26

    将其他值添加到定义为数组的Typescript JSON密钥中

  27. 27

    制作JS游戏,将其他对象添加到代码中

  28. 28

    将其他文本添加到SQL中的现有字符串?

  29. 29

    遍历数组并将其他信息添加到PHP中的项

热门标签

归档