SQL查询优化:获取每个分组的第一个数据
SELECT d.dept_no, d.emp_no, s.salary
FROM dept_emp d
JOIN salaries s ON d.emp_no = s.emp_no
WHERE d.dept_no IN (
SELECT d.dept_no
FROM dept_emp d
JOIN salaries s ON d.emp_no = s.emp_no
GROUP BY d.dept_no, d.emp_no
ORDER BY s.salary ASC
)这段SQL中如何只查询每组的第一个数据内容:您可以使用窗口函数来解决这个问题。窗口函数可以对查询结果进行分组并排序,并为每个分组分配一个序号。然后,您可以通过在外部查询中选择序号为1的行来获取每个分组的第一个数据。
以下是修改后的SQL查询:
SELECT dept_no, emp_no, salary FROM ( SELECT d.dept_no, d.emp_no, s.salary, ROW_NUMBER() OVER (PARTITION BY d.dept_no ORDER BY s.salary ASC) AS rn FROM dept_emp d JOIN salaries s ON d.emp_no = s.emp_no ) AS subquery WHERE rn = 1;
在这个查询中,首先在子查询中使用窗口函数ROW_NUMBER(),根据部门编号对数据进行分组,并按工资升序排序。然后,在外部查询中选择序号为1的行,即每个分组的第一个数据。
原文地址: https://www.cveoy.top/t/topic/pbKR 著作权归作者所有。请勿转载和采集!