所以我的SQL表看起来像这样:
EVENTS
#id
*event_type
我想选择每种类型的5个项目而不进行5个sepparate查询并建立联合。有什么方法吗?
答案 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;