我有一张包含订单详情的表格。我希望能够选择某个项目的平均属性。
例如,选择“项目a”,现在找到“项目a”的平均颜色。如果有10个“项目a”订单,并且订购的颜色按如下方式分解:
4 - 黑色
2 - 蓝色
2 - 红色
1 - 橙色
1 - 白色
我想让它返回“黑色”。是否有任何此类声明可以做到这一点?
此外,是否可以权衡平均值,例如给出“项目a”的最后3个订单的权重为2而不是1.因此,如果最后3个订单全部为黄色,则基本上会计算为6?
答案 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