jdbc sql 'weird' сортировка данных [дубликат]

Я думаю, что самый простой способ - .iloc[[0, -1]].

df = pd.DataFrame({'a':range(1,5), 'b':['a','b','c','d']})
df2 = df.iloc[[0, -1]]

print df2

   a  b
0  1  a
3  4  d
50
задан juergen d 13 May 2013 в 11:20
поделиться

6 ответов

Если вы используете SQL Server:

ORDER_BY cast(registration_no as int) ASC
9
ответ дан IPOSTEDONCE 17 August 2018 в 15:35
поделиться
ORDER_BY cast(registration_no as unsigned) ASC

явно преобразует значение в число. Другой возможностью достичь этого будет

ORDER_BY registration_no + 0 ASC

, который заставит неявный разговор.

На самом деле вы должны проверить определение таблицы и изменить ее. Вы можете изменить тип данных на int, как это

ALTER TABLE your_table MODIFY COLUMN registration_no int;
41
ответ дан juergen d 17 August 2018 в 15:35
поделиться

Один способ упорядочения положительными целыми числами, когда они хранятся как varchar, - это упорядочить по длине сначала, а затем значение:

order by len(registration_no), registration_no

Это особенно полезно, когда столбец может содержат нечисловые значения.

Примечание: в некоторых базах данных функция для получения длины строки может быть вызвана length() вместо len().

80
ответ дан Knickerless-Noggins 17 August 2018 в 15:35
поделиться
  • 1
    Вау. Из слов, чтобы выразить свой страх – Lordbalmon 10 May 2017 в 02:31
  • 2
    Это не будет работать во всех случаях. В верхней части головы случаи, которые не будут работать, представляют собой миксы целых чисел; отрицательные числа, числа с ведущими нулями, числа с дробями и слова и числа вместе взятые. – Knickerless-Noggins 14 June 2017 в 14:41
  • 3
    @ Knickerless-Noggins. , , Прочтите первое предложение ответа. Я думаю, это совершенно ясно. – Gordon Linoff 14 June 2017 в 16:06
  • 4
    @GordonLinoff заказывает один и тот же столбец дважды, а не процессор и память? – Achyuth 5 November 2017 в 17:43
  • 5
    @Achyuth. , , Количество клавиш в order by мало влияет на производительность. – Gordon Linoff 5 November 2017 в 19:52

Я предполагаю, что ваш тип столбца - STRING (CHAR, VARCHAR и т. д.), а процедура сортировки сортирует его как строку. Что вам нужно сделать, так это преобразовать значение в числовое значение. Как это сделать будет зависеть от используемой вами системы SQL.

2
ответ дан Rafal Ziolkowski 17 August 2018 в 15:35
поделиться

Я предпочитаю делать «PAD» для данных. MySql называет его LPAD, но вы можете обойтись и сделать то же самое в SQL Server.

ORDER BY REPLACE (STR (ColName, 3), SPACE (1), '0')

Эта формула предоставит ведущие нули на основе длины столбца 3. Эта функциональность очень полезен в других ситуациях вне ORDER BY, поэтому я хотел бы предоставить эту опцию.

Результаты: 1 становится 001, а 10 становится 010, а 100 остается неизменным.

1
ответ дан SQLCodingIsFunnn 17 August 2018 в 15:35
поделиться

Иногда у вас просто нет выбора, чтобы хранить числа, смешанные с текстом. В одном из наших приложений хост веб-сайта, который мы используем для нашего сайта электронной коммерции, делает динамические изменения фильтров из списков. Нет возможности сортировать по любому полю, кроме отображаемого текста. Когда нам нужны фильтры, построенные из списка, в котором говорится, что такие вещи, как 2 "до 8" 9 "до 12" 13 "до 15" и т. Д., Нам нужно было сортировать 2-9-13, а не 13-2-9, как это будет, когда считывая числовые значения. Поэтому я использовал функцию репликации SQL Server вместе с длиной самого длинного номера, чтобы набивать любые более короткие номера с ведущим пространством. Теперь 20 отсортировано после 3 и так далее.

Я работал с представлением, которое дало мне минимальную и максимальную длину, ширину и т. д. для типа и класса элемента, и вот пример того, как я сделал текст. (LB n Низкий и LB n Высокий - нижний и верхний конце 5 скобок длины.)

REPLICATE(' ', LEN(LB5Low) - LEN(LB1High)) + CONVERT(NVARCHAR(4), LB1High) + '" and Under' AS L1Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB2Low)) + CONVERT(NVARCHAR(4), LB2Low) + '" to ' + CONVERT(NVARCHAR(4), LB2High) + '"' AS L2Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB3Low)) + CONVERT(NVARCHAR(4), LB3Low) + '" to ' + CONVERT(NVARCHAR(4), LB3High) + '"' AS L3Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB4Low)) + CONVERT(NVARCHAR(4), LB4Low) + '" to ' + CONVERT(NVARCHAR(4), LB4High) + '"' AS L4Text,
CONVERT(NVARCHAR(4), LB5Low) + '" and Over' AS L5Text
0
ответ дан Vadim K. 17 August 2018 в 15:35
поделиться
Другие вопросы по тегам:

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