思路
查询出数据,然后使用group by排序,这样可以得到分组后的数据,然后我们在select中的查询字段内自定义一个字段,用来获取其排序顺序,最后再在外层加一层,只要获取前N条数据即可。
例子
SELECT t.*
FROM (
SELECT a.id,
a.type_id,
c.`name` AS typeName,
a.scan_total,
a.`name`,
(
SELECT COUNT(b.id)
FROM course AS b
WHERE b.type_id = a.type_id
AND b.scan_total > a.scan_total
) AS top
FROM course AS a LEFT JOIN course_type AS c
ON c.id = a.type_id
ORDER BY a.type_id ASC,
a.scan_total DESC
) AS t
WHERE t.top < 3