sql查询返回int而不是decimal

时间:2014-04-01 16:13:25

标签: mysql sql phpmyadmin sum

处理sql查询,但发现Sum不喜欢小数,这就是为什么小数值(XX,XX)变成整数。我的数据库是使用与measure_routine连接的例程构建的,作为数据透视表和测量。

SQL:

SELECT routines.date, routines.time, SUM( IF( measurements.title =  'T_Badende_per_Time', routines.value, 0 ) ) AS T_Badende_per_Time,
                                     SUM(IF(measurements.title = 'T_Temperatur', routines.value, 0)) AS T_Temperatur
FROM routines
INNER JOIN measure_routine ON routines.id = measure_routine.routine_id
INNER JOIN measurements ON measure_routine.measure_id = measurements.id
GROUP BY routines.date, routines.time
ORDER BY routines.date, routines.time;

enter image description here

数据库:

enter image description here

1 个答案:

答案 0 :(得分:0)

你有问题吗?

您观察到的行为的最可能解释是隐式数据类型转换。您没有提供有关列的数据类型和行内容的足够信息来确定。

如果您的value列是字符数据类型(例如CHAR或VARCHAR),您可能希望使用CASTCONVERT函数将其转换为DECIMAL类型,然后对其执行SUM。

http://dev.mysql.com/doc/refman/5.5/en/type-conversion.html

http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html#function_cast

SELECT CAST('30.95' AS DECIMAL(20,2)) 
     , CONVERT('30.95',DECIMAL(20,2))

一个简单的测试用例表明SQL SUM()聚合函数在DECIMAL数据类型值上运行得很好。

你问了一个问题吗?


<强>更新

您的查询中的SUM聚合似乎不是在DECIMAL数据类型上运行,您在VARCHAR数据上指定了SUM。因此,MySQL正在执行对数字数据的隐式数据转换。

我认为真正的问题是为什么十进制值被存储为字符数据类型。

要将字符串作为值转换为DECIMAL,将逗号字符解释为小数点,您可以执行以下操作:

SELECT r.date
     , r.time
     , SUM(IF(m.title = 'T_Badende_per_Time'
       ,CONVERT(REPLACE(r.value,',','.'),DECIMAL(20,2))
       ,0)) AS T_Badende_per_Time
     , SUM(IF(m.title = 'T_Temperatur'
       ,CONVERT(REPLACE(r.value,',','.'),DECIMAL(20,2))
       ,0)) AS T_Temperatur
  FROM routines r
  JOIN measure_routine mr 
    ON mr.routine_id = r.id
  JOIN measurements m 
    ON m.id = mr.measure_id
 GROUP BY r.date, r.time