为什么'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
发布于 2020-03-29 22:42:28
列是字符串而不是数字,这让我有点惊讶。在许多情况下,当number和字符串组合在一起时,结果类型是number --这会将'a'转换为0。
也就是说,您将获得字符串排序。这可能跟在ASCII字符集之后。在此字符集中,数字(如'1')的“字母顺序”低于字母。
不幸的是,UNION ALL的类型规则是什么,documentation并不清楚。这似乎偏向于字符串,这与算术计算不同(例如,0 = 'a'返回"true",因为'a'被转换为数字)。
https://stackoverflow.com/questions/60915797
复制相似问题