Как разбить таблицу на куски и выбрать AVG для каждого чанка

Подводя итог из этого ответа: Нет, вы не можете генерировать функции anonymous generic, но вы можете явно определить свою функцию как класс, который расширяет один из Function0, Function1, Function2 и т. д. и определить функцию приложения из этих признаков. Тогда класс, который вы определяете, может быть общим. Вот выдержка из оригинальной статьи, доступной здесь :

scala> class myfunc[T] extends Function1[T,String] {
     |     def apply(x:T) = x.toString.substring(0,4)
     | }
defined class myfunc

scala> val f5 = new myfunc[String]
f5: myfunc[String] = 

scala> f5("abcdefg")
res13: java.lang.String = abcd

scala> val f6 = new myfunc[Int]
f6: myfunc[Int] = 

scala> f6(1234567)
res14: java.lang.String = 1234

1
задан Tarasovych 19 March 2019 в 07:06
поделиться

1 ответ

Вы можете использовать следующее решение, используя эмулируемый номер строки ( ROW_NUMBER поддерживается начиная с MySQL 8.0, поэтому вы не можете использовать это):

SELECT AVG(value) 
FROM (
    SELECT value, CEIL((@row_number:=@row_number + 1) / 3) AS group_num
    FROM table_name, (SELECT @row_number:=0) rownumber
) t1
GROUP BY t1.group_num;

Вы можете использовать следующее решение начиная с MySQL 8.0 (в случае, если вы обновляете позже и для полноты), используя ROW_NUMBER :

SELECT AVG(value) 
FROM (
    SELECT value, CEIL(ROW_NUMBER() OVER () / 3) AS group_num
    FROM table_name
) t1
GROUP BY t1.group_num;

демо на dbfiddle.uk [1110 ]

0
ответ дан Sebastian Brosch 19 March 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: