【问题标题】:SQL column AVG() being treated as string and not Ordering By DESCSQL 列 AVG() 被视为字符串而不是按 DESC 排序
【发布时间】:2018-03-03 13:03:14
【问题描述】:

正在努力解决以下 sql 语句。

数据库为 MySQL,分数为 DECIMAL(5,1)

我希望按列内的平均分数排序

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

但结果并不如预期,我有高分的产品低于没有分数的产品(分数为0)。

看起来 score 被视为一个字符串,我试过了。

CAST(SCORE AS DECIMAL(5,1))

但没有运气。

感谢您的帮助,

问候

【问题讨论】:

  • 请提供完整的查询、示例数据和您得到的错误输出。
  • sqlfiddle.com/#!9/564e3b/8 这是我的代码的近似表示......似乎在 sql fiddle 中工作但在实时服务器上不起作用。

标签: mysql sql asp-classic


【解决方案1】:

尝试重复表达式:

ORDER BY AVG(COALESCE(score, 0))

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

【讨论】:

  • 感谢及时回复,scoreAvg不在表中,也尝试重复表达。
【解决方案2】:

您的值可能是 varchar(max) 所以你想将 varchar 转换为十进制或数字并添加

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

或者

Order by avg(coalesce(cast(column name as decimal (5,1)),0.0)

【讨论】:

    【解决方案3】:

    删除我的 sql 字符串后,发现我的 TEXT 格式的“image_path”列导致了问题。将其更改为 varchar(255)。

    我没有发布它,因为我认为它无关紧要。

    反正现在已经修好了。 一定是 MySQL 的 bug

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      相关资源
      最近更新 更多