SELECT DISTINCT和GROUP BY返回重复项

时间:2018-01-19 08:34:35

标签: sqlite group-by duplicates distinct

我试图从表中选择一个不同的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

3 个答案:

答案 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 roundDate。)

答案 2 :(得分:0)

以下查询返回预期结果: -

SELECT ROUND(Cost/Hours, 2) As HourlyRate, Date, FECode FROM Table1 WHERE HourlyRate!= '' GROUP BY FECode, HourlyRate ORDER BY FECode ASC