2011-04-21 91 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