选择平均列值

时间:2011-04-21 20:51:02

标签: sql sqlite

我有一张包含订单详情的表格。我希望能够选择某个项目的平均属性。

例如,选择“项目a”,现在找到“项目a”的平均颜色。如果有10个“项目a”订单,并且订购的颜色按如下方式分解:

4 - 黑色 2 - 蓝色
2 - 红色
1 - 橙色
1 - 白色

我想让它返回“黑色”。是否有任何此类声明可以做到这一点?

此外,是否可以权衡平均值,例如给出“项目a”的最后3个订单的权重为2而不是1.因此,如果最后3个订单全部为黄色,则基本上会计算为6?

1 个答案:

答案 0 :(得分: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