1

最もカウントされた要素を持つアイテムを取得したい SQLite のテーブルがあります。そして、SQLは私をバタバタさせ、間違った答えを与えています。

テーブル:

ItemNumber (int) 
totalPurchased (int)

列はこんな感じ。

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

私が戻したいのは、ItemNumber の 2 の int です。

4

2 に答える 2

3

あなたはこのように意味します:

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

重要なのは、平易な英語で何が欲しいかを考えることです。この場合は、「TotalPurchased が最大の行の ItemNumber を教えてください」です。残念ながら、SQL は "with" を理解していません。しかし、言い換えると、「TotalPurchased がテーブル全体の TotalPurchased の最大値である行の ItemNumber を教えてください」と出ます。これがここでの答えです。


もう一度考えてみると、TotalPurchased の合計が必要で、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 が最大値に関連付けられている場合、すべての結果が得られるという利点があることに注意してください。ただし、上位の結果が 1 つだけ必要な場合は、@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 に答える