#mysql #sorting #concatenation
#mysql #сортировка #объединение
Вопрос:
После выполнения простых вычислений col1 / col2, а затем использования CONCAT
для добавления буквального %
знака, я не могу успешно отсортировать их по порядку.
Первоначально мои результаты, отсортированные DESC
, были похожи
9%
8%
75%
65%
100%
После обновления:
CASE WHEN ROUND(col1/col2 *100) = 100
THEN CONCAT(100, '%')
ELSE LPAD(CONCAT(ROUND(col1/col2 *100),'%'),3,'0')
END AS Percent
Я смог успешно отсортировать столбцы с одной и двузначной цифрой, добавив 0 перед однозначной цифрой, но у меня осталось 100 не на своем месте
75%
65%
09%
08%
100%
Мысли?
Комментарии:
1. В чем вы это отображаете? вы должны вернуть отсортированное десятичное значение и разрешить пользовательскому интерфейсу обрабатывать формат отображения. Причина, по которой это не работает, заключается в том, что число теперь сортируется как символьные данные. хотя я в замешательстве, почему это не 75, 65, 100, 09, а затем 08… Я думаю, это будет зависеть от того, как вы выполняете сортировку…
2. @xQbert, я пытаюсь отобразить результаты с буквальным знаком % в качестве его условного процента.
3. Я понимаю это; но отобразите это «ГДЕ» конечный пользователь будет работать в базе данных MySQL? вы используете PHP для подключения и рендеринга, Java? asp, jsp, rails?? Независимо от того, что это за приложение, которое подключается к базе данных, должно прочитать набор записей, а затем отформатировать вывод для правильного отображения. Теперь, если вы просто хотите, чтобы это отображалось таким образом в MySQL….
4. выберите name, concat(pid, ‘%’) из mytable, где порядок условий по pid desc (а pid — целое число) в моей таблице работает нормально. Давайте посмотрим, как вы ОПИСЫВАЕТЕ your_table и ваш ВЫБОР… Синтаксис объединения.
5. В грубом приближении нет проблемы, для решения которой функции CONCAT (или GROUP_CONCAT) MySQL являются решением.
Ответ №1:
Кажется, вы уже добавили %
символ к значениям, поэтому вы можете получить их без %
знака, а затем отсортировать их и добавить %
знак обратно. Ниже приведен рабочий и протестированный пример SQL.
select concat(percentage, '%') -- add '%' sign
from (
select SUBSTRING_INDEX(percentage, '%', 1) percentage -- remove `%`
from percentage_sorting) t
order by percentage; -- order by values
Ответ №2:
Как только вы преобразуете свои проценты в строки, вы в основном получите алфавитный порядок, который обычно не соответствует тому, что вы хотите для чисел:
20%
2%
12%
1%
Если вы хотите числовую сортировку, вам нужно выполнить сортировку по фактическим числам:
SELECT CONCAT(percentage, '%')
FROM data
ORDER BY percentage DESC