2012-07-14 74 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())並選擇更好。