Конференция "Базы" » Как работает AVG() [FB 2.0]
 
  • Mike Kouzmine (04.09.08 12:16) [0]
    Суть :
    Выдать среднее по месяцам продож товара (GRUP, NNUM) за предыдущие месяца (не включая текущий).
    Если месяц до марта включительно, то учитывать предыдущий год и месяца текущего, кроме текущего месяца.

    Писал по так

    IF (MNTH < 3) THEN
       BEGIN
         SELECT AVG(SELECT EXTRACT(MONTH FROM SALES.DATE_OPER),SUM(SALES.KOLOUT) FROM SALES
           WHERE SALES.GRUP = :GRUP AND
               SALES.NNUM = :NNUM AND
               EXTRACT(YEAR FROM SALES.DATE_OPER) = :YR - 1 AND
         GROUP BY 1) FROM SALES
          INTO :KOL;
         SELECT AVG(SELECT EXTRACT(MONTH FROM SALES.DATE_OPER),SUM(SALES.KOLOUT) FROM SALES
           WHERE SALES.GRUP = :GRUP AND
               SALES.NNUM = :NNUM AND
               EXTRACT(YEAR FROM SALES.DATE_OPER) = :YR AND
               GROUP BY 1) FROM SALES
          INTO :KOL_OUT;
         IF (KOL IS NULL) THEN KOL = 0;
         KOL_OUT = KOL_OUT + KOL;
       END
     ELSE

     и так :

       BEGIN
         SELECT EXTRACT(MONTH FROM SALES.DATE_OPER), AVG(SALES.KOLOUT) FROM SALES
         WHERE SALES.GRUP = :GRUP AND
               SALES.NNUM = :NNUM AND
               EXTRACT(YEAR FROM SALES.DATE_OPER) = :YR AND
               EXTRACT(MONTH FROM SALES.DATE_OPER) < :MNTH
         GROUP BY 1 INTO :M, :KOL_OUT;
       END
     SUSPEND;
    END

    Первый if ругается на селект в AVG()
    else тупо дает количество проданного за месяц (тестировал на товаре, продажа которого была 1 раз за год)
    Селект в AVG() - эксперимент
  • Правильный$Вася (04.09.08 12:34) [1]
    avg имеет ОДИН параметр
    и дает среднее ПО ЗАПИСЯМ, а не по каким-то там месяцам
  • Mike Kouzmine (04.09.08 12:38) [2]
    Правильный$Вася   (04.09.08 12:34) [1] Спасибо за четкий ответ. Очень помог.
    Теперь помоги, раз так хорошо все знаешь, как быть в той ситуации, которую я описал выше. Как получить среднемесячное количество проданного товара за год.
  • Правильный$Вася (04.09.08 12:43) [3]

    >  Как получить среднемесячное количество проданного товара
    > за год.

    в [0] у тебя не год, а то год, то год с плюсом
    и что тебе нужно получить, если в какие-то месяцы подаж не было
  • Mike Kouzmine (04.09.08 12:44) [4]
    Или, другими словами, AVG(), в этом случае, бесполезен?
  • Mike Kouzmine (04.09.08 12:46) [5]
    Правильный$Вася   (04.09.08 12:43) [3] Пример: за год была одна продажа 25 штук товара. Надо получить среднемесячное за год, а именно 25/12 с помощью AVG. Меня интересует - это возможно или надо тупо считать?
  • Правильный$Вася (04.09.08 12:48) [6]
    это не среднемесячное
    это count за период / число месяцев
  • Mike Kouzmine (04.09.08 12:53) [7]
    Правильный$Вася   (04.09.08 12:48) [6] Мне всегда казалось, что average в математике это среднее(ожидаемое) значение. Видимо я ошибся.
  • Правильный$Вася (04.09.08 12:57) [8]
    ты так и не сказал, что ты хочешь получить для месяца с нулевыми продажами
    судя по твоим попыткам запроса, он игнорируется, но судя по объяснению - должен включаться
  • AVG(VALUE), а у тебя AVG(VALUE1, VALUE)
    Буквально так
    > AVG(SELECT EXTRACT(MONTH FROM SALES.DATE_OPER),SUM(SALES.
    > KOLOUT) FROM SALES
  • Mike Kouzmine (05.09.08 08:54) [10]
    Виталий Панасенко(дом)   (04.09.08 13:00) [9] Понял, благодарю.
 
Конференция "Базы" » Как работает AVG() [FB 2.0]
Есть новые Нет новых   [134473   +28][b:0][p:0]