如何在 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 BY
和SUM
可以很容易地实现这一点
SELECT item, sum(profit)
FROM category
WHERE endtime >=?
GROUP BY id;
【讨论】:
以上是关于如何在 SQL 中获得对重复项求和的最佳项目?的主要内容,如果未能解决你的问题,请参考以下文章
如何在从多个表中获取多行的同时删除 sql JOIN 中的重复项