如何在 SQL 中获得对重复项求和的最佳项目?

Posted

技术标签:

【中文标题】如何在 SQL 中获得对重复项求和的最佳项目?【英文标题】:How to get best items summing duplicates in SQL? 【发布时间】:2019-05-30 12:34:17 【问题描述】:

我正在尝试列出数据库中最好的项目。如果利润更高,一个项目会更好。问题是一个项目可以有重复,如 10 点钟的 500 利润和 14 点钟的 750 利润。

我当前的代码将显示尝试和 php 我过滤它。这样一来,我就拿到了 A 项,但我无法知道 A 项的总利润。

我的 SQL 语句是这样的:SELECT item FROM category WHERE endtime >=? ORDER BY profit DESC LIMIT 15 endtime 是一个 unixtime 时间戳,因此它显示上周的项目。

对于 php,我使用 array_unique($items, SORT_REGULAR); 过滤

我希望 SQL 给出 5 个最有利可图的项目的列表,其中包含利润和重复项加起来的项目。

所以这个:a 500, b 250, c 350, b 100, a 25, c 50 变为:a 525, c 400, b 350

【问题讨论】:

请以表格文本格式提供示例数据和所需结果。 【参考方案1】:

这个查询应该给你你想要的结果(没有样本数据很难确定)。基本上你需要使用SUM 来计算利润和GROUP BY item 来获取每个不同项目的总和。

SELECT item, SUM(profit) AS total_profit 
FROM category
WHERE endtime >=?
GROUP BY item
ORDER BY total_profit DESC
LIMIT 5

【讨论】:

嘿尼克,如果你认为我复制了你的答案,我没有。我可能会在您之前发布并且您有与我相同的查询,因为 2 个正确答案可能相似,而且我们还使用原始问题中的列和 mysql 中的现有函数。但是,如果您的意思是不应该再次发布类似的查询,我已经删除了我的答案。 @manishk 你在我之前发过帖子,我就不会发我的答案了。让两个用户发布基本相同的答案对任何人都没有帮助。 这正是我所期望的。 Group By 是我被遗忘的关键字。只是要确定。如果将物品 shoes_red_size_43 输入为 shoes_red_Size_43 它们将被视为不同的物品? 是的,它们将被视为不同的项目。如果你想避免这种情况,你可以使用GROUP BY LOWER(item)【参考方案2】:

如果我理解正确,你有一个这样的表格:

item | profit
----------- 
  a  | 500
  b  | 250
  c  | 350 
  b  | 100
  a  | 25
  c  | 50 

你想要:

item | profit
----------- 
  a  | 525
  b  | 350
  c  | 400

使用GROUP BYSUM 可以很容易地实现这一点

SELECT item, sum(profit)
FROM category
WHERE endtime >=?
GROUP BY id;

【讨论】:

以上是关于如何在 SQL 中获得对重复项求和的最佳项目?的主要内容,如果未能解决你的问题,请参考以下文章

对重复值求和时如何获得不同的总和?

如何在从多个表中获取多行的同时删除 sql JOIN 中的重复项

删除重复 ($addToSet) mongoose 聚合后如何对数据求和

如何对两个 SUMmed SQL 结果字段求和

如何从具有重复项的 GROUP BY 中求和不同的值

sql实现多字段求和并查询