假设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个。
答案 0 :(得分:3)
这在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
添加第二个键。
答案 1 :(得分:-1)
尝试 SELECT * FROM my_table WHERE Name IN(&#39; name1&#39;,&#39; name2&#39;,&#39; name3&#39;,&#39; name4&#39;)FETCH FIRST 100 ROWS ONLY < / p>