MySQL 分组查询(GROUP BY)用于将数据按照一个或多个列进行分组,然后对每个分组应用聚合函数(如 SUM、AVG、COUNT 等)。通常与 ORDER BY 和 LIMIT 子句结合使用,以便获取每个分组的前几条记录。
直接使用 GROUP BY 和 LIMIT 子句无法实现该需求,因为 LIMIT 是针对整个查询结果集的,而不是每个分组。可以使用子查询或窗口函数(如果 MySQL 版本支持)来解决。
SELECT d.name AS department, e.name AS employee, e.salary
FROM employees e
JOIN departments d ON e.department_id = d.id
WHERE (
SELECT COUNT(*)
FROM employees e2
WHERE e2.department_id = d.id AND e2.salary >= e.salary
) <= 2
ORDER BY d.name, e.salary DESC;
WITH ranked_employees AS (
SELECT d.name AS department, e.name AS employee, e.salary,
DENSE_RANK() OVER (PARTITION BY d.id ORDER BY e.salary DESC) AS rank
FROM employees e
JOIN departments d ON e.department_id = d.id
)
SELECT department, employee, salary
FROM ranked_employees
WHERE rank <= 2
ORDER BY department, salary DESC;
通过上述方法,可以有效地获取每个分组的前几条记录,并解决相关问题。
领取专属 10元无门槛券
手把手带您无忧上云