Порядок запросов по ASC в таблицах Google

У меня есть таблица Google, в которой используется следующий запрос:

= query ('Respostas do Formulário 1'! A1: AG; "выберите D, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, ГДЕ B = '7ºA', порядок D ASC "; 1)

Однако столбец D из листа: «Respostas do Formulário 1» имеет значения с номером, а затем именем впереди, и когда он выполняет запрос в листе1, я хотел, чтобы он заказал ASC, например 1, 2,3, .., 10, 11,12 .. Но, как вы видите на изображении, этого не происходит ...

введите здесь описание изображения

Могу ли я это сделать?


person Mary    schedule 01.02.2018    source источник


Ответы (3)


Если у вас всегда стоит дефис (-) после числа, вы можете попробовать извлечь число и отсортировать его перед выполнением запроса:

=query(sort(A:A,value(left(A:A,(search("-",A:A)-1))),true),"Select  Col1 where Col1<'999'")

(изменить диапазоны по своему усмотрению).

person Tom Sharpe    schedule 01.02.2018

Вам нужно преобразовать строки в числа:

  • 1 - xxxxx to 1
  • 10 - yyyy to 10
  • ...

Строки сортируются как строка: "1", "10", "11", ..., "2", ..., "22", "23", ...

Значит, они сортируются по первому символу, потом по второму и так далее.


Решение №1 - создать дополнительный столбец в таблице данных и извлекать числа с помощью такой формулы, как REGEXEXTRACT(A2,"^\d+")*1.

Решение №2 - получать числа на лету. Вот примерная формула:

=QUERY(FILTER({REGEXEXTRACT(A:A,"^\d+")*1,A:C},B:B="a"),"select * order by Col1")

введите здесь описание изображения

Примечания:

  • Формула использует фильтр для объединения массива. Фильтр ограничивает диапазон только необходимыми строками.
  • {} в фильтре используется для объединения массива.
  • REGEXEXTRACT(A:A,"^\d+")*1 даст столбец чисел. ^ означает начало строки, \d означает цифру, + означает один или несколько. *1 - преобразовать строку "10" в число 10
  • В запросе используется обозначение Col1, поскольку источником является массив.
person Max Makhrov    schedule 01.02.2018

Если у кого-то еще возникла проблема лексикографической сортировки функцией QUERY числового столбца, я решил ее, выбрав соответствующий формат в числовом столбце, чтобы числовой порядок совпадал с лексикографическим порядком.

Пример

Предположим, что столбец B содержит 2-значные целые числа (т.е. числа от 0 до 99).

При добавлении персонализированного числового формата «0 #» в столбец B числа отображаются как 01, 02, 03, ..., 99. Итак, формула

=query(A1:B100,"SELECT * ORDER BY B ASC")

Работает как хотелось бы.

Для этого необходимо заранее знать количество цифр. Для чисел от 0 до 1000 формат будет «00 #».

person S. Armstrong    schedule 14.05.2020