T-SQL舍入为0.0、0.5或1.0

T-SQL舍入为0.0、0.5或1.0,sql,tsql,sql-order-by,rounding,Sql,Tsql,Sql Order By,Rounding,我有一个有趣的问题,我需要以特定的方式舍入AVG函数的结果,以便在ORDERBY子句中使用 这些用于配方评级 四舍五入公式示例: 1.2 -> 1 1.4 -> 1 1.5 -> 1.5 1.6 -> 2 1.9 - >2 我正在查询一个食谱列表,它们需要被订购,这样一个5星级的食谱就不会比100个平均4.9级的食谱订购得多。order by条款的第二部分是评级计数 如果这需要一个用户定义的函数,我不太确定如何去做。如果我理解正确,你有星星和半星星吗? ORDER

我有一个有趣的问题,我需要以特定的方式舍入AVG函数的结果,以便在ORDERBY子句中使用

这些用于配方评级

四舍五入公式示例:

1.2 -> 1
1.4 -> 1
1.5 -> 1.5
1.6 -> 2
1.9 - >2
我正在查询一个食谱列表,它们需要被订购,这样一个5星级的食谱就不会比100个平均4.9级的食谱订购得多。order by条款的第二部分是评级计数


如果这需要一个用户定义的函数,我不太确定如何去做。

如果我理解正确,你有星星和半星星吗?
ORDER BY
    CASE WHEN (Num % 1) = .5
        THEN Num
        ELSE ROUND(Num,0)
    END

我建议按ROUNDvalue*2,0/2排序,这样它将四舍五入到最接近的0.5半星阶。

OP不希望四舍五入到最接近的半星阶。1.4->1不是1.5是的,我注意到了,只是觉得根据常识,他会的也就是说,如果100个评分平均值为4.9的配方应该四舍五入到5颗星,并且排名高于单个5颗星评级的配方,为什么100个评分平均值为1.4的配方排名低于单个1.5颗星评级的配方?当然,这只是我的猜测,根据OP的例子,你的解决方案是正确的。他们最终同意最接近的半颗星。这肯定会成功的:这些似乎是有意义的,而且看起来应该会成功。我对Num作为无效列名存在问题。如果示例中的Num是从SELECT中的子查询中找到的,那么它将不起作用的任何原因。选择otherStuff,Num=从表2中选择AvgRatingtable1@danomite这将是一个问题,因为Num不是列。使用联接,或将当前查询包装在子查询中:从SELECT otherstuff中选择*从table2中选择AvgRating作为table1中的Num按大小写顺序…我将其标记为已接受-结果他们现在希望它四舍五入到最近的一半。。。现在他们终于听到了……这应该满足了最初的问题。