Соотношение между алфавитом и числом в Mysql 5,6 - PullRequest
0 голосов
/ 29 марта 2020

Почему «a» предшествует любому целому числу в столбце с операциями типа int, string и max, min или avg.

Контекст запроса: -

select max(col1),max(col2),min(col2),avg(col3) 
from 
(
select 1 as col1, 2  as col2, 3  as col3 
union select 5, 6, 7 
union select 7, 8, 9 
union select 0, 1, 2
union select 1, 2, 3
union select 'a','b','c'
) as result_set;

Результат: -

| max(col1) | min(col2) | avg(col3) |
|-----------|-----------|-----------|
|         a |         1 |      4.25 |

Фрагмент SQLfiddle: -

http://sqlfiddle.com/#! 9 / 24fc37 / 1

1 Ответ

1 голос
/ 29 марта 2020

Я немного удивлен, что столбцы - это строки, а не числа. При многих обстоятельствах, когда число и строки объединяются, результирующий тип является числом - и это превратит 'a' в 0.

Тем не менее, вы получаете порядок строк. И это, вероятно, следует за набором символов ASCII. В этом наборе символов цифры (например, '1') имеют более низкий «алфавитный» порядок, чем буквы.

К сожалению, в документации неясно, каковы правила для типов с UNION ALL. Кажется, что есть смещение к строкам, которое отличается от арифметического c вычисления (например, 0 = 'a' возвращает «true», потому что 'a' преобразуется в число).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...