2012-04-30 100 views
-1

我有一个MySql表,它有两列,分别是类别和名称。我有4个独特的类别值,此表中有数千条记录。但是,所有这些记录都属于表中列出的四个类别之一。基于列值获取mysql查询结果

现在,我想要的是,作为输出,我应该得到2个结果的每个类别,即2个结果的第一类,然后2个结果的下一个类别等等。

单个查询可能吗?

+0

你能告诉你的表结构,一些样本数据和你所期望的。你的问题被标记为每个组的最大值,这通常不是一个标准查询,因为它是一个可以用SQL变量完成的迭代过程,但也应该受到限制,所以你不会浏览整个表的内容可能是数百万条记录...只是在最差的情况下,最后30天左右的条目。 – DRapp

回答

0
set @num := 0, @cat := ''; 

select category,name 
     @num := if(@cat = category, @num + 1, 1) as row_number, 
     @cat := category as dummy 
from MyTable 
group by cateogry, name 
having row_number <= 2; 
+0

这就是我要去的地方,但是按分组的方式使用非聚集的聚集...您是否测试了这个?难道它不仅仅是通过组获取行号的第一个条目(除非添加了row_number列)。另外,根据我对海报的提问,应该有一些限制,以防止通过完整的文件。 – DRapp

-1

这是怎么回事?

SELECT * FROM your_table WHERE category = 1 LIMIT 2 
UNION 
SELECT * FROM your_table WHERE category = 2 LIMIT 2 
UNION 
SELECT * FROM your_table WHERE category = 3 LIMIT 2 
UNION 
SELECT * FROM your_table WHERE category = 4 LIMIT 2