ВАЖНО: как сводить, группировать и агрегировать по двум типам животных

У меня есть IMPORTRANGE(...), который дает следующую таблицу:

Дата принятия Встреча на дому Имя Собаки Щенки Кошки Котята Куры Цыплята ... 25.01.2023 26.01.2023 Коди 3 0 2 1 30 5 ... 24.02.2024 29.02.2024 Роб 0 2 0 4 0 0 ... 29.01.2024 29.01.2024 Роб 1 0 2 4 2 10 ... 29.01.2024 29.01.2024 Роб 2 1 0 1 5 3 ... ... ... ... ... ... ... ... ... ... ...

Я хотел бы обернуть эту функцию чем-то вроде QUERY() с помощью GROUPBY или PIVOT() или какой-либо комбинации TRANSPOSE() и SUM(), чтобы получить следующий результат:

Дата принятия Встреча на дому Имя Животное # Взрослые # Молодой 25.01.2023 26.01.2023 Коди Собачий 3 0 25.01.2023 26.01.2023 Коди кошачий 2 1 25.01.2023 26.01.2023 Коди Птица 30 5 24.02.2024 29.02.2024 Роб Собачий 0 2 24.02.2024 29.02.2024 Роб кошачий 0 4 29.01.2024 29.01.2024 Роб Собачий 3 1 29.01.2024 29.01.2024 Роб кошачий 2 5 29.01.2024 29.01.2024 Роб Птица 7 13 ... ... ... ... ... ...

Обратите внимание, что для Rob's Birds нет строки, поскольку все эти значения равны нулю.

По сути, мне нужно взять все уникальные комбинации даты усыновления, даты возвращения домой, имени и (поворотных) видов животных и агрегировать сумму взрослых особей и сумму молодняка. Я уверен, что это возможно с помощью одной формулы, но не могу уяснить себе группировку, агрегирование и поворот как функцию оператора SQL-запроса. Спасибо за любую помощь.

@player0 11 видов и категория «другое».

Aleister Tanek Javas Mraz 23.05.2024 02:56

@player0 Я могу настроить поиск, но молодое животное всегда будет следовать за взрослым животным, поэтому я мог бы использовать собак, кошек, кур вместо собак, кошек, птиц.

Aleister Tanek Javas Mraz 23.05.2024 03:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
84
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

пытаться:

 = {A1:C1, "Animal", "# Adults", "# Young";
 QUERY(QUERY(INDEX(LET(b, D2:INDEX(I:I, MAX(ROW(A:A)*(A:A<>""))), a, OFFSET(b,,-3,,3), w, R:S,
 c, TOCOL(FILTER(b, MOD(COLUMN(b)-1, 2)),,1), 
 d, TOCOL(FILTER(b, MOD(COLUMN(b), 2)),,1), 
 e, IFNA(VLOOKUP(TOCOL(FILTER(IF(b = "",,OFFSET(b,-1,,1,)), MOD(COLUMN(b)-1, 2)),,1), w, 2, )),
 f, LAMBDA(x, REDUCE(x, SEQUENCE((COLUMNS(b)/2)-1), LAMBDA(a, b, IF(b, {a; x}))))(a), {f, e, c, d})), 
 "select Col1,Col2,Col3,Col4,sum(Col5),sum(Col6) group by Col1,Col2,Col3,Col4", ), 
 "where Col5>0 or Col6>0", )}

  • вам нужно будет изменить I:I, чтобы отразить последний столбец
  • диапазон с животными должен содержать четное количество столбцов
  • измените R:S, чтобы отразить вашу таблицу поиска
  • без таблицы поиска это было бы:

  • подача его напрямую с помощью IMPORTRANGE будет:

  • где, конечно, Sheet18!D2:I5:


обновлять

это зависит от того, где именно находится этот столбец с фамилией. например, если это здесь:

формула изменится следующим образом:

 = {"Adoption Date", "Take-Home Date", "Name", "LAST NAME", "Animal", "# Adults", "# Young";
 QUERY(QUERY(INDEX(LET(b, IMPORTRANGE("1sPiWXvVIIuNdUEl04Ku8zZs0zL3HYnTFXwV2C67Ex5k", "Sheet18!E2:J5"), a, OFFSET(b,,-4,,4), w, R:S,
 c, TOCOL(FILTER(b, MOD(COLUMN(b), 2)),,1), 
 d, TOCOL(FILTER(b, MOD(COLUMN(b)-1, 2)),,1), 
 e, IFNA(VLOOKUP(TOCOL(FILTER(IF(b = "",,OFFSET(b,-1,,1,)), MOD(COLUMN(b), 2)),,1), w, 2, )),
 f, LAMBDA(x, REDUCE(x, SEQUENCE((COLUMNS(b)/2)-1), LAMBDA(a, b, IF(b, {a; x}))))(a), {f, e, c, d})), 
 "select Col1,Col2,Col3,Col4,Col5,sum(Col6),sum(Col7) group by Col1,Col2,Col3,Col4,Col5", ), 
 "where Col6>0 or Col7>0", )}

Это работает именно так, как я просил. Оказывается, мне нужно включить столбец с фамилией, и я пытался адаптировать вашу формулу, но столкнулся с некоторыми проблемами. Есть минутка, чтобы дать подсказку?

Aleister Tanek Javas Mraz 23.05.2024 06:57
Ответ принят как подходящий

Вот один из подходов, который вы можете опробовать:

=let(Σ,A2:D, Λ,lambda(x,wrapcols(x,rows(Σ),x)),
     query(vstack({Σ,Λ("Canine"),E2:F},
                  {Σ,Λ("Feline"),G2:H},
                  {Σ,Λ("Bird"),  I2:J}),
 "select Col1,Col2,Col3,Col4,Col5,sum(Col6),sum(Col7) where Col6>0 OR Col7>0 group by Col1,Col2,Col3,Col4,Col5 label sum(Col6) '',sum(Col7) ''"))

  • Если вам нужно добавить, скажем, еще один вид (лошадь, лошадка) в графы K,L; тогда общий диапазон (назначенный ярлыку Σ) будет A2:L && внутри vstack, вам нужно добавить дополнительное условие как таковое {Σ,Λ("Equine"),K2:L}
  • Last Name добавлен сюда как Column_D для представления.

Эта версия формулы встраивает и обрабатывает ваши данные напрямую.

=let(Σ,importrange("Sheet_ID","data!A2:J"), Γ,choosecols(Σ,1,2,3,4), Λ,lambda(x,wrapcols(x,rows(Σ),x)),
     query(vstack({Γ,Λ("Canine"),choosecols(Σ,5,6)},
                  {Γ,Λ("Feline"),choosecols(Σ,7,8)},
                  {Γ,Λ("Bird"),  choosecols(Σ,9,10)}),
 "select Col1,Col2,Col3,Col4,Col5,sum(Col6),sum(Col7) where Col6>0 OR Col7>0 group by Col1,Col2,Col3,Col4,Col5 label sum(Col6) '',sum(Col7) ''"))

Другие вопросы по теме

Создание расписания частоты, которое динамически обновляется в зависимости от даты начала и частоты кадров
Как мне внести изменения в отчет ЕСЛИ И, чтобы правильно отображать произведенные или нет платежи?
Какие функции я бы использовал наряду с функциями Match, Index и Large для фильтрации по дате?
Подсчитать количество строк в ячейке в листе Google
Нужна помощь в понимании Google Таблиц ПРОЦЕНТЕСЛИ
Запретить SPLIT преобразовывать текст в числа в Google Sheets при использовании в ARRAYFORMULA?
Выделите ячейку, если значение флажка различается между соответствующими номерами строк и номерами столбцов
Перетаскивание множества независимых формул одновременно в Google Sheets
Возврат совокупности последних трех строк вхождения в таблицах Google
Как сопоставить данные из двух таблиц разного размера на основе нескольких критериев и извлечь соответствующее значение в Google Sheets