MySQL LIMIT and GROUP BY with use of IN?



我有一个表ITEMS,它有props id,site_id,frequency

到目前为止,我可以使用从id数组中列出项目并按频率排序

SELECT * 
FROM items 
WHERE id IN(1549, 1550, 1635, 1637) 
ORDER BY site_id, frequency DESC

但我想按site_id将我的结果分组,只包含一个频率最好(最高)的项目。。

我该怎么办?

编辑:我想让频率最好的项目按site_id分组(一个结果按site_id)

在没有看到数据类型或样本数据的情况下,听起来你想要的是:

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) 
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会有多行。

最新更新