Google Query Language для суммы результата, используя ссылку на ячейку в запросе - PullRequest
0 голосов
/ 25 августа 2018

Здравствуйте и спасибо за вашу помощь.Я новичок в GQL, но имею хороший опыт работы с SQL и думаю, что, возможно, упускаю что-то маленькое.У меня есть 2 листа, с которыми я работаю

Main sheet

Colum G
InstanceID
i-554532f4693fc6186
i-09554fcda5f2f3262
i-0047551ae514412d5

-

Data Sheet

Colum A                 Colum B
i-554532f4693fc6186      10.12
i-554532f4693fc6186      12.12
i-554532f4693fc6186      13.12
i-554532f4693fc6186      17.12
i-554532f4693fc6186      30.12

Я пытаюсь написать запрос, который найдет все строки, которые соответствуют идентификатору экземпляра в столбце G длятаблицы данных столбца A и вернуть AVG всех совпадений в столбце B, верхние 5 макс и верхние 5 мин.

Я обнаружил, что не могу указать запрос на ячейку для ссылки на идентификатор экземпляра.Есть ли способ?Я использую это, чтобы попытаться получить максимум, и он работает для 1, но я выбрал верхнюю 5 или любое число.

=sort(query('HeC-Metrics'!A:B,"select max(B) Where A = 'i-044532f4693fc6186'"))

Я в порядке, мне нужно делать разные запросы для каждого из требуемых результатов, AVG, мин., Макс.Я также хотел бы сослаться на ячейку в столбце G, чтобы не вводить InstanceID вручную.

Спасибо, что уделили время.Стивен

1 Ответ

0 голосов
/ 25 августа 2018

Так что это просто случай получения правильного синтаксиса для использования значения ячейки в качестве совпадения в запросе

=query(Sheet2!A:B,"select avg(B) where A='"&G2&"' group by A label avg(B)  ''",1)

Обратите внимание, что вам на самом деле не нужна группа, если у вас уже есть список различных идентификаторов для сравнения, но вы не можете иметь агрегат, такой как avg, без него.

Чтобы получить 5 нижних, вы можете использовать фильтр и сортировать

=transpose(sortn(filter(Sheet2!B:B,Sheet2!A:A=G2),5))

(я транспонировал результат, чтобы получить его в строке (строка 2) вместо столбца)

или вы можете использовать запрос

=transpose(query(Sheet2!A:B,"select B where A='"&G2&"' order by B  limit 5 label B '' ",1))

Аналогично, чтобы получить топ-5, вы можете использовать

=transpose(sortn(filter(Sheet2!B:B,Sheet2!A:A=G2),5,,1,false))

или

=transpose(query(Sheet2!A:B,"select B where A='"&G2&"' order by B desc limit 5 label B '' ",1))

В связи с этим возникает вопрос: можно ли получить эти результаты (а) без использования списка отдельных значений и (б) в формуле одного массива без копирования.

Вы, несомненно, могли бы получить различные идентификаторы и средние значения сразу же после запроса. Получить верхние или нижние значения n из ряда групп гораздо сложнее. Я пытался сделать это в предыдущем вопросе , но для этого требуется длинная и громоздкая формула.

...