1

我有一个表 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)

4

2 回答 2

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) 
于 2012-09-12T19:16:28.277 回答
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注意:如果两者的频率相同,这将为您提供多于一行。

于 2012-09-12T19:18:38.380 回答