选择每种类型的项目数

时间:2011-10-06 20:45:58

标签: php mysql sql

所以我的SQL表看起来像这样:

EVENTS
#id
*event_type

我想选择每种类型的5个项目而不进行5个sepparate查询并建立联合。有什么方法吗?

3 个答案:

答案 0 :(得分:1)

为了将结果限制为每组5个项目,您应该在子查询中使用limit子句。我目前的MySQL版本不允许这种情况发生(5.1.47)我不确定新版本是否支持这种情况。

这是我能得到的最接近的:

select id, event_type from events e1
where (
    select count(*) from events e2
    where e1.event_type = e2.event_type) >= 5;

对于有5个或更多id关联的所有event_types,将返回对id,event_type。

我想到的另一个问题就是我提到的那个我不会跑的因为我得到了:

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

我不确定是否有任何版本支持它,或者它是否是误导性错误。这是理论上的查询:

select id, event_type from events e1
where (
    select count(*) from events e2
    where (
    e2.id in (
        select id from events e3
        where e3.event_type = e2.event_type
        limit 5
    ) and e2.event_type = e1.event_type)
) >= 5;

我很确定mysql是否可以处理那个有效的限制。

希望这有帮助。

答案 1 :(得分:-1)

尝试使用聚合函数:

SELECT event_type,max(id) FROM `EVENTS` GROUP BY event_type

答案 2 :(得分:-1)

试试这个:

select id, event_type 
from EVENTS e 
where (
    select count(*) 
    from EVENTS e1 where e.event_type=e1.event_type and e1.id < e.id) < 5 
order by event_type;