1

props id、site_id、frequencyを持つテーブルITEMSがあります

これまでのところ、アイテムをリストし、ID の配列から頻度で並べ替えることができます。

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

しかし、結果を site_id でグループ化し、頻度が最も高い (最高の) アイテムを 1 つだけ使用したいと考えています。

私はどのように行いますか ?

編集: site_id でグループ化された最高の頻度を持つアイテムが必要です (site_id で 1 つの結果)

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注:両方の頻度が同じ場合、これにより、1 行につき複数の行が得られます。

于 2012-09-12T19:18:38.380 に答える