2011-04-21 120 views
0

我有一個包含訂單詳細信息的表。我希望能夠選擇某個項目的平均屬性。選擇平均列值

例如,選擇「項目a」,現在找到「項目a」的平均顏色。如果有 「項」 的10項目顏色下令拋錨如下:

4 - 黑
2 - 藍色
2 - 紅
1 - 橙
1 - 白

我想讓它返回「黑色」。有沒有這樣的說法可以做到這一點?

此外,是否有可能衡量平均值,例如給出「項目a」的最後3個訂單的權重爲2,而不是1.因此,如果最後3個訂單都是黃色,算作6?

+0

你在尋找一個平均值還是最大值?根據你的例子,「黑色」似乎是「最常見」(即最大)值。 – 2011-04-21 20:53:39

+0

@Joe Stefanelli平均有三種類型:均值,中位數和模式。羅傑在這裏尋找模式。 – Neil 2011-04-21 21:23:51

回答

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