我想你想要每个生日的十名学生。这是一个最大的每组 n 查询,您可以搜索堆栈溢出 http://www.google.com/search?q=greatest-n-per-group+mysql+site%3Astackoverflow.com看看如何在 MySQL 中完成此操作。
如果 MySQL 支持 ROW_NUMBER 函数,那会很容易,但由于它不支持,您可以使用变量来模拟它。例如,要为每个出生日期获取 3 个学生,您可以这样做:
SELECT
student_id,
year_of_birth
FROM (
SELECT
year_of_birth,
student_id,
@rn := CASE WHEN @prev_year_of_birth = year_of_birth
THEN @rn + 1
ELSE 1
END AS rn,
@prev_year_of_birth := year_of_birth
FROM (SELECT @prev_year_of_birth := NULL) vars, students T1
ORDER BY year_of_birth, student_id DESC
) T2
WHERE rn <= 3
ORDER BY year_of_birth, student_id
Result:
1, 1990
2, 1990
5, 1990
4, 1991
7, 1991
8, 1991
6, 1992
测试数据:
CREATE TABLE students (student_id INT NOT NULL, year_of_birth INT NOT NULL);
INSERT INTO students (student_id, year_of_birth) VALUES
(1, 1990),
(2, 1990),
(3, 1991),
(4, 1991),
(5, 1990),
(6, 1992),
(7, 1991),
(8, 1991);