Mysql 从每个类别中选择几个小ID
例如,给定此表 id |类别 1 | 10 2 | 10 3 | 10 4 | 10 5 | 20 6 | 20 7 | 20 8 | 30 9 | 30 10 | 30 11 | 30 我们希望从每个类别中获得前2个小id,即我们需要这个结果 一, 二, 五, 六, 八, 九, 我写了这个问题和他的作品Mysql 从每个类别中选择几个小ID,mysql,Mysql,例如,给定此表 id |类别 1 | 10 2 | 10 3 | 10 4 | 10 5 | 20 6 | 20 7 | 20 8 | 30 9 | 30 10 | 30 11 | 30 我们希望从每个类别中获得前2个小id,即我们需要这个结果 一, 二, 五, 六, 八, 九, 我写了这个问题和他的作品 SELECT MIN(id) AS id FROM mytable GROUP BY category UNION SELECT MIN(
SELECT MIN(id) AS id FROM mytable GROUP BY category
UNION
SELECT MIN(id) AS id FROM mytable WHERE
id NOT IN (SELECT MIN(id) AS id FROM mytable GROUP BY category) GROUP BY category
ORDER BY id
但这里有一个问题,如果我们想从每个类别中获得前2个id,这是可行的,但是如果我们想从每个类别中获得更多的第一个小id,例如7,查询将非常困难。
有人有想法,如何使这变得容易?要从每个组中找到前N名,请尝试以下指南:要从每个组中找到前N名,请尝试以下指南:@Quassnoi就这个主题写了几篇内容丰富的文章,得出结论,如果你对类别id有一个复合索引,那么以下内容将非常有效: 在电视上看
要选择前4条记录,请将限制1,1更改为限制3,1。更一般地说:要选择前n条记录,请将限制1,1更改为限制n-1,1。@Quassnoi就这一主题写了几篇内容丰富的文章,得出结论,如果您对类别id有一个复合索引,那么以下内容将非常有效: 在电视上看 要选择前4条记录,请将限制1,1更改为限制3,1。更一般地说:要选择前n条记录,请将限制1,1更改为限制n-1,1
SELECT mytable.*
FROM mytable JOIN (
SELECT category, (
SELECT id
FROM mytable
WHERE mytable.category = categories.category
ORDER BY id
LIMIT 1, 1
) AS id
FROM (
SELECT DISTINCT category
FROM mytable
) AS categories
) AS limits ON mytable.category <= limits.category
AND mytable.category >= limits.category
AND IFNULL(mytable.id <= limits.id, TRUE)