2011-04-21 13 views
0

注文の詳細が入ったテーブルがあります。私はある項目の平均属性を選択できるようにしたいと考えています。平均列の値を選択

たとえば、「項目a」を選択すると、「項目a」の平均色が見つかります。決裂順序付け10の "アイテムA" のオーダーと色があった場合は、次のように:

4 - ブラック
2 - ブルー
2 - 赤
1 - オレンジ
1 - 白

私はそれが "黒"に戻ることを望みます。そのような声明はありますか?

また、「item a」の最後の3つの注文に1の代わりに2の重みを与えるなど、平均の重みを付けることもできますか?最後の3つの注文がすべて黄色だった場合、 6として数えますか?

+0

平均か最大を探していますか?あなたの例に基づいて、「黒」は「最も一般的な」(つまり、最大)値であるようです。 –

+0

@Joe Stefanelli平均には、平均、中央値、モードの3種類があります。ロジャーはここでモードを探しています。 – Neil

答えて

1

あなた色にgroup byすることができますし、最初の行を選択します。

select color 
from OrderLines 
where ItemId = 'item a' 
group by 
     color 
order by 
     count(*) desc 
limit 1 

あなたはサブクエリでいくつかの行に高い重みを与えることができます。これは最後の3つの注文に高い体重を与えます:

select color 
from (
     select o1.color 
     ,  case when 
       (
       select count(*) 
       from OrderLines o2 
       where o1.item = o2.item 
         and o1.OrderDt < o2.OrderDt 
       ) < 3 then 2 else 1 end as weight 
     from OrderLines o1 
     ) 
where Item = 'item a' 
group by 
     color 
order by 
     sum(weight) desc 
limit 1 
関連する問題