Выберите среднее значение столбца - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть таблица, содержащая детали заказа. Я хотел бы иметь возможность выбрать средний атрибут для определенного элемента.

Например, выберите «пункт a», теперь найдите средний цвет «элемента a». Если было 10 заказов «предмета а» и заказанные цвета распадаются следующим образом:

4 - черный
2 - синий
2 - красный
1 - оранжевый
1 - белый

Я бы хотел, чтобы это вернуло "черное". Есть ли такое утверждение, которое могло бы сделать это?

Кроме того, можно ли было бы взвесить среднее значение, например, присвоив последним 3 ордерам "item a" вес 2 вместо 1. Поэтому, если все последние 3 ордера были желтыми, это, по существу, считается как 6?

1 Ответ

1 голос
/ 22 апреля 2011

Вы можете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...