SQL列AVG()被视为字符串而不是按DESC排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL列AVG()被视为字符串而不是按DESC排序相关的知识,希望对你有一定的参考价值。

苦苦挣扎下面的sql语句。

数据库是mysql,得分为DECIMAL(5,1)

我希望通过列内的平均分数来订购

...AVG(COALESCE(score,0)) AS scoreAvg ... ORDER BY scoreAvg DESC

但结果并不像预期的那样,我的产品得分低于没有分数的分数(得分为0)。

看起来像得分被视为一个字符串,我试过。

CAST(SCORE AS DECIMAL(5,1))

但没有运气。

感谢您的任何帮助,

问候

答案

尝试重复表达式:

ORDER BY AVG(COALESCE(score, 0))

我想到的第一个解释是scoreavg已经在一个表中,并且排序是使用列而不是计算表达式。

另一答案

您的值可能在varchar(max)中因此您要将varchar转换为decimal或numeric并添加

Order  by avg(COALESCE(column name,0)) 

要么

Order by avg(coalesce(cast(column name as decimal (5,1)),0.0)
另一答案

剥离我的sql字符串后,结果我的TEXT格式的“image_path”列导致了问题。将其更改为varchar(255)。

我没有发布它,因为我认为它不相关。

无论如何现在修好了。必须是MySQL中的一个错误

以上是关于SQL列AVG()被视为字符串而不是按DESC排序的主要内容,如果未能解决你的问题,请参考以下文章

sql 按指定规则排序,例如 按 1,3,2排序 而不是1,2,3

jQuery DataTable 日期顺序

SQL里面的排序语句desc和ASC有啥区别

SQL Server:按分组列求和并按另一列排序

按间隔对第 2 列进行排序并按顺序对第 1 列进行排序

SQL里面的排序语句desc和ASC有什么区别