考虑下表:
id int primary_key
user_id int
type enum('type1', 'type2', 'type3')
以实际状态:
id user_id type
1 2 type1
2 2 type1
3 2 type1
4 2 type1
5 2 type2
我想编写一个select,它返回id为1,2,3,5的行; 我想为user_id = 2选择所有行,同时只选择每种类型的最多3行。不会选择id = 4的行,因为它已经找到了3行type1。
一种方法是为每个类型的值创建3个单独的查询,然后创建它们的UNOIN。是否有更好/更有效的方式?
答案 0 :(得分:0)
试试这个: -
SELECT *
FROM your_table yt
WHERE (SELECT COUNT(*)
FROM your_table ty
WHERE ty.type = yt.type
AND ty.id <= yt.id
) <= 3;
我认为这可能会对你有帮助。