【问题标题】:MySQL Percentage of 2 columns not working =NULLMySQL 2 列不工作的百分比 =NULL
【发布时间】:2015-08-18 15:24:02
【问题描述】:

我在MYSQL中有如下语句:

SELECT Site, Areateam, 
SUM( IF( year = '15-16', 1, 0 ) ) "Y2", 
SUM( IF( year = '14-15', 1, 0 ) ) "Y1",
SUM('Y2') / SUM('Y1')* 100 AS Diff
FROM CD2015_EmailIncidents
WHERE Areateam = 'Greater Manchester'
GROUP BY Site

返回以下结果:

**Site           |Areateam             |Y2  |Y1  |Diff**

Acute Trust      |Greater Manchester   |0   |1   |NULL

Care Home        |Greater Manchester   |3   |22  |NULL

CD Store Room    |Greater Manchester   |7   |4   |NULL

College Greater  |Greater Manchester   |0   |1   |NULL

我似乎无法用正确的语法来显示 Y2 和 Y1 之间的百分比差异,因为它一直显示为 NULL

非常感谢 最大

【问题讨论】:

    标签: mysql sql multiple-columns percentage


    【解决方案1】:

    您的问题是您正在对字符串值进行算术运算:

    SUM('Y2') / SUM('Y1')* 100 AS Diff
    

    MySQL 进行静默转换,因此它将值转换为数字。没有前导数字,因此它们被转换为 0。

    MySQL 然后为0/0 返回NULL

    Juergen 对此有正确的解决方案。您的整体查询可以表示为:

    SELECT Site, Areateam, 
           SUM(year = '15-16') as Y2, 
           SUM(year = '14-15') as Y1,
           100 * SUM(year = '15-16') / SUM(year = '14-15') AS Diff
    FROM CD2015_EmailIncidents
    WHERE Areateam = 'Greater Manchester'
    GROUP BY Site;
    

    【讨论】:

    • 可以调整'diff'小数点吗?所以它显示 0% 或 12% 等等...?
    • 您可以使用format() 或将其转换为小数或整数。您必须使用concat() 添加%
    【解决方案2】:

    您不能在select 子句中使用计算的列名。并首先乘以 100 以避免整数限制

    SUM(year = '15-16') * 100 / SUM(year = '14-15')  AS Diff
    

    【讨论】:

      【解决方案3】:

      那是因为“Y1”和“Y2”在该上下文中不存在。

      SELECT Site, Areateam, 
          SUM( IF( year = '15-16', 1, 0 ) ) "Y2", 
          SUM( IF( year = '14-15', 1, 0 ) ) "Y1",
          SUM( IF( year = '15-16', 1, 0 ) ) * 100 / 
          SUM( IF( year = '14-15', 1, 0 ) AS Diff
      FROM CD2015_EmailIncidents
      WHERE Areateam = 'Greater Manchester'
      GROUP BY Site
      

      在此处检查舍入ROUND OR TRUNC

      【讨论】:

      • 哇,非常感谢您的超级快速回复!我明白您在说什么,您的声明有效!..谢谢!但是如何控制 NULL 值并将小数点设置为 2 位? Site Areateam Y2 Y1 Diff Acute Trust Greater Manchester 0 1 0.0000 Care Home Greater Manchester 3 22 13.6364 CD Store Room Greater Manchester 7 4 175.0000 College Greater Manchester 0 1 0.0000 牙科诊所 Greater Manchester 1 0 NULL Drug and Alcohol Service Greater Manchester 0 1 0.0000 GP练习大曼彻斯特 8 21 38.0952
      • 不要在评论中粘贴此类数据,只需更新问题即可。
      • 我包含一个用于圆形或截断示例的链接。请注意,选择答案仅显示 TRUNC。你应该检查解释两者的那个
      猜你喜欢
      • 1970-01-01
      • 2014-05-03
      • 2017-10-03
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      相关资源
      最近更新 更多