我在SQLite中有一个表格,我希望获得具有最多计数元素的项目。 SQL正在给我带来麻烦并给我错误的答案。
表:
ItemNumber (int)
totalPurchased (int)
行看起来像这样。
ItemNumber TotalPurchased
1 7
1 10
1 20
2 40
3 32
我想要回来的是ItemNumber的2的int。
答案 0 :(得分: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的答案。
答案 1 :(得分:2)
如果您需要按ItemNumber对所有内容求和,则取max,使用此
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())并选择更好。