【问题标题】:Multiple duplicated rows returned on GROUP BY query in mysqlmysql中的GROUP BY查询返回多个重复的行
【发布时间】:2015-05-16 18:45:27
【问题描述】:

我使用以下 mysql 查询,认为它会给我一个按给定字段分组的唯一行表。我最终得到了几行,其中按字段分组是重复的,但唯一的 id 和 count 是唯一不同的东西。

有数万行,但只有几百行重复,在字段中没有明显差异。这可能是什么原因造成的?

 CREATE TABLE group_avg_product_prices AS
        SELECT group_id,
        feature_1, 
        feature_2, 
        feature_3,
        AVG(price) AS avg_price,
        count(*) AS sample_count, 
        GROUP_CONCAT(unique_id SEPARATOR ",") AS items
 FROM products_table
 GROUP BY group_id,
          feature_1, 
          feature_2, 
          feature_3

返回类似于以下内容的行:

asdf123 | 2 | 1| .5| 2.65| 3| id1,id2,id3
asdf123 | 2 | 1| .5| 2.34| 2| id4,id5

这让我发疯了,我找不到任何可能这样做的原因。

提前感谢您的帮助。

【问题讨论】:

  • 你能用一些示例数据创建一个 sqlfiddle 吗?
  • 如果可以的话,那将非常有帮助。不幸的是,有 30,000 多行,而且只发生在其中约 200 行。
  • 为导致问题的数据创建。
  • 您需要发布更多示例数据。在示例输出中发布生成结果的示例模式。还提供您正在寻找它产生的样本输出。这有助于人们更好地了解我们正在处理的内容。谢谢。
  • 尝试CAST(feature3 AS DECIMAL(..,1),如果它被定义为真实的,等等。

标签: mysql sql


【解决方案1】:

根据您的示例数据,第四列是数字。它可能看起来像 0.5,但值可能不同,例如 0.499999 和 0.500001。

我的建议是在输出中使用format(),以便您可以看到差异,或者在查询本身中使用。例如,将两行具有相似值的两行组合起来,直到小数点后一位:

 SELECT group_id, feature_1,  feature_2, 
        format(feature_3, 1) as feature_3,
        AVG(price) AS avg_price,
        count(*) AS sample_count, 
        GROUP_CONCAT(unique_id SEPARATOR ',') AS items
 FROM products_table
 GROUP BY group_id, feature_1, feature_2, 
          format(feature_3, 1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多