我们说我们有两张桌子。一个用于人,一个用于汽车。现在我想显示所有车辆的清单,将每辆车限制为两辆车。
用
SELECT c.*,
p.*
FROM cars c,
people p
WHERE c.carOwnerPeopleId = p.peopleId
GROUP BY p.peopleId
我已将每人限制为1辆汽车。但是我如何通过展示2辆汽车来进行分组?
表人
peopleId
peopleName
桌车
carId
carOwnerPeopleId
carBrand
carName
结果可能是:
carId, carOwnerPeopleId, carBrand, carName, peopleId, peopleName
1, 1, BMW, Series 3, 1, Jon
1, 1, Audi, A4, 1, Jon
1, 1, Mercedes, SL AMG, 1, Jon
但是现在我想为#" Jon"。
提供2个结果答案 0 :(得分:0)
在MySQL中,最好的方法可能是使用变量:
select c.*
from people p join
(select c.*,
(@rn := if(@p = c.carOwnerPeopleId, @rn + 1,
if(@p := c.carOwnerPeopleId, 1, 1)
)
) as rn
from cars c cross join
(select @p := -1, @rn := 0) params
order by c.carOwnerPeopleId
) c
on c.carOwnerPeopleId = p.PeopleId
where rn <= 2;
如果你想要两辆特定的汽车(两个最新,两个最大,两个最红或其他),你可以向order by
添加第二个钥匙。