MySQL LIMIT和GROUP BY使用IN?

时间:2012-09-12 19:13:50

标签: mysql

我有一个表ITEMS,它有道具id,site_id,频率

到目前为止,我可以列出这些项目,并使用

从id数组中按频率对它们进行排序
SELECT * 
FROM items 
WHERE id IN(1549, 1550, 1635, 1637) 
ORDER BY site_id, frequency DESC

但是我想通过site_id将我的结果分组,只有一个项目具有最佳(最高)频率..

我该怎么办?

编辑:我希望将具有最佳频率的项目按site_id分组(一个结果由site_id)

2 个答案:

答案 0 :(得分:3)

如果没有看到数据类型或示例数据,您会想要这样:

<击> select id, site_id, max(frequency) FROM items WHERE id IN(1549, 1550, 1635, 1637) GROUP BY id, site_id ORDER BY site_id, frequency DESC

或者您可以使用子查询:

select i1.id, i1.site_id, i1.frequency
from items i1
inner join
(
   select site_id, max(frequency) mx
   from items
   WHERE id IN(1549, 1550, 1635, 1637) 
   group by site_id
) i2
   on i1.site_id = i2.site_id
   and i1.frequency = i2.mx
WHERE i1.id IN(1549, 1550, 1635, 1637) 

答案 1 :(得分:2)

select i.*
from (
    select site_id, max(frequency) as MaxFrequency
    from item
    where id in (1549, 1550, 1635, 1637)    
    group by site_id
) im
inner join items i on im.site_id = i.site_id and im.MaxFrequency = i.frequency
where i.id in (1549, 1550, 1635, 1637)    

注意:如果两者具有相同的频率,则每site_id会为您提供一行。