mysql分组后每组各取前10条sql
时间: 2023-11-25 07:06:22 浏览: 297
SELECT *
FROM (
SELECT *,
@row_number:= CASE
WHEN @group = group_id THEN @row_number + 1
ELSE 1
END AS num,
@group:=group_id AS dummy
FROM my_table
ORDER BY group_id, score DESC
) ranked
WHERE num <= 10;
相关问题
mysql分组后取每组前10
可以使用子查询来实现分组后取每组前10的需求,具体的SQL语句如下:
```
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY score DESC) AS row_num
FROM your_table
) AS t
WHERE t.row_num <= 10;
```
上面的SQL语句中,`your_table`是你要查询的表名,`group_id`是你要分组的字段名,`score`是你要排序的字段名。`ROW_NUMBER()`函数可以给每个分组中的记录赋予一个行号,`PARTITION BY`表示按照`group_id`字段进行分组,`ORDER BY`表示按照`score`字段进行降序排序。最后,在子查询中筛选行号小于等于10的记录即可。
实现MySQL分组并且每组取10条数据
可以通过子查询和变量来实现MySQL分组并且每组取10条数据的需求,例如:
```
SELECT *
FROM (
SELECT *,
@row_number := IF(@current_group = your_group_column, @row_number + 1, 1) AS row_number,
@current_group := your_group_column AS dummy
FROM your_table
ORDER BY your_group_column, your_column
) AS t
WHERE row_number <= 10
```
其中,your_table是你要查询的表名,your_group_column是你要分组的列名,your_column是你要排序的列名。这条SQL语句会按照your_group_column和your_column进行排序,然后使用变量@current_group和@row_number来标记当前分组和当前行数,最后筛选出每组前10条数据。
需要注意的是,以上语句在MySQL 5.7及以上版本中可以正常运行,在之前的版本中可能会出现错误。如果你的MySQL版本低于5.7,建议考虑升级版本或者使用其他方法实现需求。
阅读全文