作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
假设 my_table 中有数百万条记录。
这是我从列表中提取具有特定名称的行的查询:
SELECT * FROM my_table WHERE Name IN ('name1','name2','name3','name4')
如何限制每个 name1、name2 等的返回结果?以下查询将限制整个结果(到 100)。
SELECT * FROM my_table WHERE Name IN ('name1','name2','name3','name4') LIMIT 100
我需要将每个名称限制为 100 个。
最佳答案
这在 MySQL 中有点痛苦,但最好的方法可能是变量:
select t.*
from (select t.*,
(@rn := if(@n = name, @rn + 1,
if(@n := name, 1, 1)
)
) as rn
from my_table t cross join
(select @n := '', @rn := 0) params
order by name
) t
where rn <= 100;
如果您想将此限制为名称的子集,请将 where
子句添加到子查询。
注意:如果您想选择某些行——例如最旧或最新或最大或最高——只需将第二个键添加到子查询中的order by
。
关于MySQL:WHERE IN 列表的限制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44958082/
我是一名优秀的程序员,十分优秀!