MySQL GROUP BY - 显示每组的X结果

时间:2016-08-17 12:55:51

标签: mysql sql mysqli

我们说我们有两张桌子。一个用于,一个用于汽车。现在我想显示所有车辆的清单,将每辆车限制为两辆车。

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个结果

1 个答案:

答案 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添加第二个钥匙。