在SQL中设置求和结果的小数位数

17

我有一个数据库用于辩论比赛,我正在尝试对成绩进行排序,以查看哪些学校将在学期末参加决赛。

如下所示,我已经做到了这一点,但是我无法将ptc字段四舍五入,它目前返回最多4位小数,例如如果他们赢得了3场比赛中的2场,则为0.6667。

    SELECT   t.id,
             t.name                  AS name,
             SUM(t.id  = d.winnerid) AS w,
             SUM(t.id != d.winnerid) AS l,
             SUM(t.id  = d.winnerid)/(SUM(t.id  = d.winnerid)+SUM(t.id != d.winnerid)) AS ptc
    FROM     debates AS d
        JOIN teams   AS t ON t.id IN (d.hostid, d.visitid)
    WHERE    d.visitid != -1
         AND d.debatedate < CURDATE()
    GROUP BY t.id
    ORDER BY ptc DESC

我认为我必须在这里使用decimal(2,2),但我无法正确使用语法,我尝试了一些不同的东西,例如:

SUM(t.id  = d.winnerid)/(SUM(t.id  = d.winnerid)+SUM(t.id != d.winnerid)) AS ptc decimal (2,2)

如果需要,我很乐意提供有关表格的更多信息,但我不认为有必要吗?


请查看我的答案更新。 - Java Curious ღ
2个回答

31

试试这个。

SELECT ROUND(SUM(cash), 2)
FROM <tablename>

如果您没有得到任何结果,那么可能存在空值,请尝试使用此方法。

SELECT ROUND(SUM(cash), 2)
FROM<tablename> a
WHERE cash IS NOT NULL

这是它的一个简单演示:

更新:

 SELECT round( ROUND(SUM(p.prod_price = l.prod_unit_price), 2)
/ROUND(SUM(p.prod_id = l.prod_id), 2),2)
FROM b2b.product_master p
join b2b.move_cart_item_master l;

我尝试将你的内容覆盖到我的演示中,但不太确定该如何做? - ak85
((SELECT ROUND((SUM(t.id = d.winnerid)/(SUM(t.id = d.winnerid)+SUM(t.id != d.winnerid)))), 2) FROM debates) AS ptc - ak85
您需要在每个时间上使用 ROUND(SUM(t.id = d.winnerid), 2),因为如果您不每次都使用它,可能由于查询问题导致无法获取预期数据。 - Java Curious ღ
@ak85 - 不用谢,保持微笑.. :) - Java Curious ღ

2

对于ptc字段Round,保留2位小数...

替换

这一行,

SUM(t.id  = d.winnerid)/(SUM(t.id  = d.winnerid)+SUM(t.id != d.winnerid)) AS ptc

致,

这一行!

ROUND(SUM(t.id  = d.winnerid)/(SUM(t.id  = d.winnerid)+SUM(t.id != d.winnerid)),2) AS ptc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接