2015-09-11 2 views
1

У меня есть код, который сортирует так:почему mySQL сортировка по DESC рейтинге 9.98 выше, чем 85.24?

SELECT product_id, relevancy FROM db_products ORDER BY relevancy DESC

relevancy поля обновляется отдельно со значениями в пределах от 1.00 до 99.99

Теперь, у меня есть таблица, и когда я сортирую их relevancy DESC он выглядит следующим образом:

product_id relevancy 
90643 98.4 
90566 92.2 
90494 9.98 
90484 9.95 
90490 9.8 
90467 9.75 
90630 9.64 
90580 9.53 
90533 9.2 
90455 9.15 
90531 9.07 
90689 9.07 
90644 85.24 
90603 84.34 
90534 81.96 

Почему это рейтинг 9.98 больше, чем 85.24? Как я могу избежать этого и правильно сортировать его?

+0

словарь заказа, Вы должны заказывать десятичным поле вывода (не символ/VARCHAR) – amdixon

+0

ли поле релевантности десятичное или varchar? – pedro

+0

Поле VARCHAR. Должен ли я изменить его на что-то еще? – user1227914

ответ

1

Поле релевантности - varchar, поэтому сортировка будет в порядке слов. Вы должны изменить тип столбца в десятичную, или преобразовать столбец VARCHAR в десятичной системе во время сортировки:

SELECT product_id, relevancy FROM db_products ORDER BY CAST(relevancy AS decimal(10,2)) DESC

1

На основании этого ответа MySQL Query Sorting with Numbers

Вы можете:

  1. Изменение ORDER BY relevancy DESC до ORDER BY CAST(relevancy AS FLOAT) DESC
  2. Переопределите структуру DB, чтобы у вас есть десятичная (4,2) в качестве столбца relevancy. Первый аргумент - это общее количество цифр точности, а второй аргумент - количество цифр после десятичной точки.

EDIT: Я думаю, что комментарий Эндрюс стоит прочитать, если учесть второе решение.

1

Проверьте тип релевантности. Я думаю, что это должно быть «varchare». изменить его плавать или дублируют

или использовать ORDER BY CAST (уместность AS десятичной (10,2)) DESC

Смежные вопросы