使用LIMIT子句取前幾條
最簡單的方法是使用LIMIT子句,可以設置返回的記錄數。
例如,需要找出每個部門工資最高的前兩名員工:
SELECT dept_no, emp_no, MAX(salary) FROM salaries GROUP BY dept_no ORDER BY dept_no, MAX(salary) DESC LIMIT 2;
使用子查詢取前幾條
也可以使用子查詢在Group By語句中取前幾條數據。
例如,需要找出每個部門工資最高的前兩名員工:
SELECT dept_no, emp_no, salary FROM salaries WHERE (dept_no, salary) IN (SELECT dept_no, MAX(salary) FROM salaries GROUP BY dept_no) ORDER BY dept_no, salary DESC LIMIT 2;
使用變量取前幾條
在MySQL 8.0之后,可以使用變量在Group By語句中取前幾條數據。
例如,需要找出每個部門工資最高的前兩名員工:
SET @row_number = 0;
SELECT dept_no, emp_no, salary FROM (SELECT dept_no, emp_no, salary, @rank := IF(@prev_dept_no = dept_no, @rank + 1, 1) AS rank, @prev_dept_no := dept_no FROM salaries, (SELECT @rank := 0, @prev_dept_no := NULL) AS init WHERE 1 ORDER BY dept_no, salary DESC) AS ranked WHERE rank<= 2 ORDER BY dept_no, salary DESC;
總結
使用MySQL Group By語句取前幾條數據可以增強查詢的靈活性,可以根據實際的需求選擇不同的方法實現。