我试图从表中选择一个不同的HourlyRate,然后通过FECode(基本上是一个人)对得到的HourlyRate进行分组。一个人随着时间的推移可能有2或3个比率,但返回的结果涉及对同一个FECode重复相同的HourlyRate。
SELECT DISTINCT Cost/Hours As HourlyRate, Date, FECode
FROM Table1
WHERE HourlyRate != ''
GROUP BY HourlyRate, FECode
ORDER BY FECode
结果如下:
HourlyRate, Date, FECode
215.00, 2017-04-06, AAA
215.00, 2017-04-27, AAA
225.00, 2017-06-16, AAA
表1中的数据如下: -
Date, FECode, Cost, Hours
2017-04-06, AAA, 236.5, 1.1
2017-04-27, AAA, 43, 0.2
2017-06-16, AAA, 247.5, 1.1
显然,在这个例子中,215.00的第二个结果不应该返回,但它是。我该如何阻止这种情况发生?
更新:正如Juraj正确识别的那样,这是一个浮点精度/舍入问题。关键是ROUND(第2列)来解决问题。
以下查询将获得所需的结果: -
SELECT ROUND(Cost / Hours,2)作为HourlyRate,Date,FECode FROM Table1 每小时有效!='' GROUP BY FECode,HourlyRate ORDER BY FECode ASC
答案 0 :(得分:2)
结果没问题,因为DISTINCT删除了匹配"完整的列"的行。成本/小时数是除数,结果看起来像圆数(但数字不相同),因此它不匹配相同的数字。尝试使用它,不要忘记删除日期列:
Arrays.sort
答案 1 :(得分:0)
这两个值不相等:
SELECT 236.5/1.1 = 43/0.2;
0
确实存在差异:
SELECT 236.5/1.1 - 43/0.2;
-2.8421709430404e-14
请参阅http://rextester.com/ZRDQ22190
你必须Is floating point math broken?结果。
(并使用此GROUP BY round列Date
。)
答案 2 :(得分:0)
以下查询返回预期结果: -
SELECT ROUND(Cost/Hours, 2) As HourlyRate, Date, FECode FROM Table1 WHERE HourlyRate!= '' GROUP BY FECode, HourlyRate ORDER BY FECode ASC