SQLite列是列中最常见的项

时间:2012-07-14 19:28:04

标签: sql sqlite

我在SQLite中有一个表格,我希望获得具有最多计数元素的项目。 SQL正在给我带来麻烦并给我错误的答案。

表:

ItemNumber (int) 
totalPurchased (int)

行看起来像这样。

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

我想要回来的是ItemNumber的2的int。

2 个答案:

答案 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())并选择更好。