栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我可以在带有窗口功能的SQL查询中进行分组吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我可以在带有窗口功能的SQL查询中进行分组吗?

如果您运行第二个查询而没有

groupby
(您可能已经尝试过)(从您发布的多余分号开始),您将看到每位员工得到一行,每行显示其所在部门的最低工资。该最小值是分析值,
min()
因为它具有window子句。该
PARTITIONBY
是等效的
GROUP BY
,但没有聚集在整个结果集。

获得相同结果的最简单方法(几乎)是使用

RANK()
分析函数,该函数根据分配的分区和顺序对值进行排序,同时允许联系:

SELECt employee_id, last_name, salary, department_id,  RANK() OVER (PARTITION BY department_id ORDER BY salary) AS rnkFROM employeesORDER BY department_id, rnk;EMPLOYEE_ID LAST_NAME          SALARY DEPARTMENT_ID        RNK----------- ------------------------- ---------- ------------- ----------        200 Whalen    4400 10          1        202 Fay       6000 20          1        201 Hartstein13000 20          2        119 Colmenares2500 30          1        118 Himuro    2600 30          2        117 Tobias    2800 30          3        116 Baida     2900 30          4        115 Khoo      3100 30          5        114 Raphaely 11000 30          6...        102 De Haan  17000 90          1        101 Kochhar  17000 90          1        100 King     24000 90          3...

对于部门20和30,您可以看到排名1的行是最低工资。对于部门90,有两名排名第一的员工,因为他们的最低工资相同。

您可以将其用作内联视图,并仅选择排名第一的行:

SELECt employee_id, last_name, salary, department_idFROM (  SELECt employee_id, last_name, salary, department_id,    RANK() OVER (PARTITION BY department_id ORDER BY salary) AS rnk  FROM employees)WHERe rnk = 1ORDER BY department_id;EMPLOYEE_ID LAST_NAME          SALARY DEPARTMENT_ID----------- ------------------------- ---------- -------------        200 Whalen    4400 10        202 Fay       6000 20        119 Colmenares2500 30        203 Mavris    6500 40        132 Olson     2100 50        107 Lorentz   4200 60        204 Baer     10000 70        173 Kumar     6100 80        101 Kochhar  17000 90        102 De Haan  17000 90        113 Popp      6900100        206 Gietz     8300110        178 Grant     700013 rows selected.

如果您不必担心联系,那么还有一个更简单的选择,但这在这里不合适。

请注意,这比原始查询多了一行。您正在加入

on sml.department_id =emp.department_id
。如果部门ID为null(如员工178那样),则该联接失败,因为您无法使用相等性测试将null与null进行比较。由于此解决方案没有联接,因此不适用,并且您会在结果中看到该员工。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/370917.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号