Порядок переменных SQL

#mysql #sql #sql-order-by

#mysql #sql #sql-order-by

Вопрос:

Почему, когда у меня есть такие записи, как ( ratings = varchar ):

 A - 100
B - 70
C - 30
  

Затем:

 SELECT * FROM `videos` ORDER BY `rating` DESC
  

Дает:

 A - 30
B - 70
C - 100
  

И:

 SELECT * FROM `videos` ORDER BY `rating` ASC
  

Дает:

 A - 100
B - 70
C - 30
  

Но когда ( ratings = tinyint ):

 SELECT * FROM `videos` ORDER BY `rating` DESC
  

Дает:

 A - 100
B - 70
C - 30
  

Комментарии:

1. я не вижу разницы между первым и последним запросом

2. я изменил столбец рейтинга с varchar на tinyint, что исправило это. Я хочу знать, почему.

3. ага, извините, я этого не видел, lmao.

4. ваши примеры выходных данных не имеют для меня смысла. Разве A и B не были бы отменены для ваших первых двух запросов

Ответ №1:

Когда у вас есть столбец varchar, длина текстовых данных и тот факт, что символ ‘0’ стоит перед символом ‘1’ (а не после символа ‘9’), влияет на порядок сортировки.

например, сравнить

 select '100' as col1 
union all 
select '70' as col1
order by col1 asc
  

с

 select '100' as col1 
union all 
select '070' as col1
order by col1 asc
  

Вы можете обойти это, соответствующим образом дополнив все строки одинаковой длины.

Комментарии:

1. Итак, как varchar с 3 строками 100, 76, 22. Каким будет DESC и почему? Я вроде понял, что ты говоришь.

Ответ №2:

вы можете попробовать:

 SELECT * FROM videos ORDER BY rating, videos DESC
  

Комментарии:

1. Я уже нашел решение, я просто хочу знать, почему, когда столбец varchar, он не работает, а когда его tinyint, он работает.