【问题标题】:SELECT DISTINCT and GROUP BY returning duplicatesSELECT DISTINCT 和 GROUP BY 返回重复项
【发布时间】:2018-06-28 10:48:34
【问题描述】:

我正在尝试从表中选择不同的 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

Table1的数据如下:-

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 的第二个结果不应该返回,但它确实返回了。我该如何阻止这种情况发生?

【问题讨论】:

  • 我们需要样本表数据和预期结果。 (请格式化文本。)
  • 您的示例输出中没有重复的行(另外:使用 group by 没有聚合实际上没有意义)
  • 我已将表格数据添加到原始问题中。是的,数据集中有重复的行,因为应该只有一个 215.00 的实例。如果我从 SELECT 列中删除日期,我仍然会得到 215.00 的 2 个实例,AAA。所以是的,有一个重复。
  • 向我们展示预期的结果。

标签: sqlite group-by duplicates distinct


【解决方案1】:

结果没问题,因为 DISTINCT 删除了与“完整列集”匹配的行。 Cost/Hours 是除数的数字,结果看起来像整数(但数字不一样),因此它与相同的数字不匹配。尝试使用它,不要忘记删除日期列:

SELECT cast(Cost/Hours as text) As HourlyRate, FECode
FROM Table1
WHERE HourlyRate != ''
ORDER BY FECode

【讨论】:

  • 是的,但我只希望看到一个 215.00 实例,一个 225.00 实例。请参阅上面的评论,即使我删除日期,我仍然会得到两个结果 215.00,AAA,这不是我期望的结果。
  • 感谢您的编辑。当我运行这个查询时(我之前尝试过),我得到 5 个结果:2 x 215.00, AAA 和 3x 225.00, AAA
  • 我没有注意到 215.0 是计算字段。请试试这个 DISTINCT(Cost/Hours) As HourlyRate
  • 我想我知道问题出在哪里。 215.00 是四舍五入的数字,因此整数没有区别。我会编辑答案
【解决方案2】:

这两个值不相等:

SELECT 236.5/1.1 = 43/0.2;
0

其实还是有区别的:

SELECT 236.5/1.1 - 43/0.2;
-2.8421709430404e-14

Is floating point math broken?

你必须round结果。

(并将Date 列与此 GROUP BY does not make sense 一起使用。)

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2020-11-05
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多