gpt4 book ai didi

mysql - SQL查询分组后仍然有重复项

转载 作者:行者123 更新时间:2023-12-01 00:18:41 25 4
gpt4 key购买 nike

SELECT *
FROM `eBayorders`
WHERE (`OrderIDAmazon` IS NULL
OR `OrderIDAmazon` = "null")
AND `Flag` = "True"
AND `TYPE` = "GROUP"
AND (`Carrier` IS NULL
OR `Carrier` = "null")
AND LEFT(`SKU`, 1) = "B"
AND datediff(now(), `TIME`) < 4
AND (`TrackingInfo` IS NULL
OR `TrackingInfo` = "null")
AND `STATUS` = "PROCESSING"
GROUP BY `Name`,
`SKU`
ORDER BY `TIME` ASC LIMIT 7

我试图确保所有名称和 SKU 都不会出现在同一结果中。我试图按名称分组,然后按 sku 进行分组,但是我遇到了一个问题,即显示的结果具有相同的名称和不同的 skus,我不想发生这种情况。我如何修复此查询以确保结果集中始终存在不同的名称和 SKU?!

例如我有一个订单:

Name: Ben Z, SKU : B000334, oldest
Name: Ben Z, SKU : B000333, second oldest
Name: Will, SKU: B000334, third oldest
Name: John, SKU: B000036, fourth oldest

The query should return only:
Name: Ben Z, SKU : B000334, oldest
Name: John, SKU: B000036, fourth oldest

这是因为所有名称在集合中应该只有一个条目以及 SKU。

最佳答案

这里有两个问题。

首先是 ANSI 标准说,如果你有一个 GROUP BY 子句,你唯一可以放在 SELECT 子句中的是 中列出的项目GROUP BY 或使用聚合函数(SUM、COUNT、MAX 等)的项目。您问题中的查询选择了表中的所有列,甚至是那些不在 GROUP BY 中的列。如果您有多个记录与一个组匹配,则该表不知道将哪个记录用于这些额外的列。

MySql 对此很愚蠢。正常的数据库服务器会抛出错误并拒绝运行该查询。 Sql Server、Oracle 和 Postgresql 都可以做到这一点。 MySql 会猜测你想要哪些数据。让您的数据库服务器猜测数据通常不是一个好主意。

但这并不能解释重复项……只是为什么运行错误的查询。您有重复项的原因是您对 NameSKU 进行了分组。因此,例如,对于 Ben Z 的记录,您只想查看最旧的 SKU。但是,当您对 NameSKU 进行分组时,您会得到一个单独的组,用于 { Ben Z, B000334 } { Ben Z , B000333 ...这是 Ben Z 的两行,但这是查询所要求的,因为 SKU 也是确定组的一部分。

如果您只想查看每个人的一条记录,则需要仅按人员字段进行分组。这可能意味着首先构建查询的那部分,以确定您需要的基本记录集,然后加入这个原始查询作为完整解决方案的一部分。

关于mysql - SQL查询分组后仍然有重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40922574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com