SQLite min/max奇怪的行为

eLe*_*ner 1 sqlite max aggregate-functions min

我有一个排名表,其架构被定义为rank(id,key,value),其中key是主键

sqlite> .schema rank
CREATE TABLE 'rank' ( ID VARCHAR, KEY VARCHAR, VALUE VARCHAR NOT NULL );
CREATE INDEX 'rank_id___djklaf3451jlZZZRFfa___' ON 'rank' ( ID );

sqlite> select * from rank;
-----------------------------------------------------
Tymb-W64uwvM|Tymc8LPQnxBg|5
TymdPRdFpBcE|TymdSsaIFhuI|2
TymdPRdFpBcE|TymdjkGgExcE|3
TymeVf6N1RH4|TymeZGxydCJ8|3
TymeVf6N1RH4|Tymeecz1ORW8|20

sqlite> select id,min(value) from rank group by id;
------------------------------------------------------
Tymb-W64uwvM|5
TymdPRdFpBcE|2
TymeVf6N1RH4|20

sqlite> select id,max(value) from rank group by id;
------------------------------------------------------
Tymb-W64uwvM|5
TymdPRdFpBcE|3
TymeVf6N1RH4|3
Run Code Online (Sandbox Code Playgroud)

如您所见,最小和最大功能的第3个结果都不正确.sqlite版本是3.6.23.

有什么建议?

pax*_*blo 5

这是因为value是一种字符类型(特别是varchar)而不是数字类型.

如果您正在对字符数据进行排序,则表示为:

2
20
3
3
5
Run Code Online (Sandbox Code Playgroud)

如果你执行了这就是你会看到的:

select value from rank order by value asc
Run Code Online (Sandbox Code Playgroud)

如果要对其进行数字排序,则应将列定义为数字类型,例如integer.