1

我在 SQLite 中有一个表,我想获取具有最多计数元素的项目。SQL 让我发疯,给了我错误的答案。

桌子:

ItemNumber (int) 
totalPurchased (int)

这些行看起来像这样。

        ItemNumber              TotalPurchased
        1                        7
        1                       10
        1                       20
        2                       40
        3                       32

我想要返回的是 ItemNumber 的 2 整数。

4

2 回答 2

3

你的意思是这样的:

SELECT ItemNumber
FROM myTable
WHERE TotalPurchased = (SELECT MAX(TotalPurchased) FROM myTable)

关键是用简单的英语思考你想要什么。在这种情况下,它是“给我 TotalPurchased 最大行的 ItemNumber”。不幸的是,SQL 不理解“with”。但换个说法,我们得到“给我 TotalPurchased 是整个表中 TotalPurchased 最大值的行的 ItemNumber”,这就是这里的答案。


再想一想,我可能误解了你,你想要 TotalPurchased (TotalPurchased 不是总数?)......在这种情况下,试试类似的东西:

SELECT t1.ItemNumber, SUM(t1.TotalPurchased) AS TotalTotalPurchased
FROM myTable AS t1
GROUP BY ItemNumber
HAVING SUM(t1.TotalPurchased) =  (
    SELECT SUM(TotalPurchased)
    FROM myTable
    GROUP BY ItemNumber
    ORDER BY SUM(TotalPurchased) DESC  
    LIMIT 1
)

http://sqlfiddle.com/#!5/1cd57/3

请注意,这些查询的优点是,如果将多个 ItemNumber 绑定到最大值,您将获得所有结果。但是,如果您只想要一个最佳结果,请使用@DmitryOsinovskiy 的回答。

于 2012-07-14T19:31:58.787 回答
2

如果您需要按 ItemNumber 对所有内容求和,则取最大值,使用此

select ItemNumber from MyTable
group by ItemNumber
order by sum(TotalPurchased) desc
limit 1

如果你不需要求和,试试这个

select ItemNumber from MyTable
order by TotalPurchased desc
limit 1

无论如何,比较我的解决方案和 lc 解决方案的性能。(使用 max())并选择更好的。

于 2012-07-14T19:34:41.813 回答