Есть ли способ написать эти запросы, чтобы их не нужно было обновлять каждый раз при добавлении или удалении столбца?
Можно ли использовать именованные диапазоны в запросах для решения этой проблемы?
Да, вы могли бы использовать именованные диапазоны вместо встроенных заголовков столбцов, но основная идея такая же, как и у других ответов на этот вопрос, которые были предложены на аналогичном вопросе на этом сайте: электронную таблицу необходимо настроить для построения динамической строки SQL .
Допустим, что Jи Gсоответствует именованным диапазонам Gradesи Classсоответственно.
Следующий подход работает только тогда, когда столбцы находятся между столбцами A и Z
CELL("address",Grades)вернется "$J:$J". Чтобы получить ссылку на столбец, используйте MID(CELL("address",Grades),2,1)get "J". Окончательная формула
= QUERY (B: J, "ВЫБЕРИТЕ AVG (" &
MID (ЯЧЕЙКА ( "адрес", классы), 2,1) &
") ГРУППА ПО "&
MID (ЯЧЕЙКА ( "адрес", класс), 2,1))
Следующий подход работает для всех случаев
COLUMN(Grades)вернет целое число (число в форме 1,2,3 и т. д.). Чтобы упростить формулу для создания аргумента оператора SQL, я предлагаю заставить SQL использовать ссылки на столбцы в форме COL1, COL2 и т. д. с помощью массива. обозначение ( {B:J}). Окончательная формула
= QUERY ({B: J}, "ВЫБЕРИТЕ AVG (Col" & COLUMN (Grades) -1 & ") GROUP BY Col" и COLUMN (Class) -1)
Демо-таблица
Ссылки
Использование массивов в Google Sheets - Cправка - Редакторы Документов Google