2012-07-14 76 views
1

我在SQLite中有一个表,我想获取具有最多计数元素的项目。而SQL正在驱动着我,并给我错误的答案。SQLite列列中最常见的项目

表:

ItemNumber (int) 
totalPurchased (int) 

该行是这个样子。

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

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

回答

3

你的意思是这样的:

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

的关键是要想想你想用简单的英语是什么。在这种情况下,它是“给我具有最大总采购额的行的商品编号”。不幸的是,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的答案一起。

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 

总之,比较我的表现解决方案和解决方案。 (使用max())并选择更好。