我正在嘗試編寫一個SQL查詢,它將返回每個公司和每個位置的頂級項目。我有一個例子MySQL表(TABLE_X),看起來像這樣:MySQL基於多個分組中的計數的頂部項目
Date | Company | Location | Item | Price | Quantity | Total_Amount
----------|---------|----------|--------------|-------|----------|-------------
1/10/2000 | ABC | 1 | Food | 2 | 6 | 12
1/11/2000 | ABC | 1 | Food | 1 | 2 | 2
1/12/2000 | ABC | 2 | Food | 10 | 5 | 50
1/13/2000 | ABC | 2 | Electronics | 100 | 2 | 200
1/10/2000 | ABC | 1 | Consumables | 10 | 5 | 50
1/15/2000 | ABC | 2 | Electronics | 100 | 3 | 300
1/10/2000 | DEF | 1 | Electronics | 50 | 5 | 250
1/16/2000 | DEF | 1 | Electronics | 50 | 4 | 200
1/19/2000 | DEF | 2 | Food | 10 | 5 | 50
1/14/2000 | DEF | 2 | Food | 2 | 10 | 20
1/11/2000 | DEF | 2 | Food | 5 | 8 | 40
1/11/2000 | DEF | 2 | Electronics | 500 | 2 | 1000
再舉例來說,我要的是回到是每個位置每個公司計頂部的項目。所以像這樣的情況下,每個公司和每個位置的計數最高的項目。
Company | Location | Item | AVG(Price) | SUM(Total_Amount) | COUNT(*)
--------|----------|-------------|------------|-------------------|---------
ABC | 1 | Food | 4 | 14 | 2
ABC | 2 | Electronics | 100 | 500 | 2
DEF | 1 | Electronics | 50 | 450 | 2
DEF | 2 | Food | 5.67 | 110 | 3
我知道如何做到這一點在所有的公司和地點,但有麻煩通過計數獲得最高的項目是每一個具體的分組內。理想情況下,如果可能的話我有更多的項目類型,我希望能夠將其擴展到前N個項目。
這是我運行的基於事件生成頂級項目的SQL查詢。
SELECT Company, Location, Item, AVG(Price), SUM(Total_Amount), COUNT(*) FROM table_x
GROUP BY Company, Location, Item
ORDER BY Company, Location, COUNT(*) desc
何時是頂級項目?還要添加你已經嘗試過的。 – Jeffrey
嗨傑弗裏,頂級項目是最頻繁發生的一次,無論價格,數量還是總數。因此,在上述我期待的結果示例中,公司ABC和位置1的首選項是食品,因爲它在該組內發生了兩次,而電子產品和消耗品只發生過一次。我編輯添加了我運行的查詢,但只根據整個數據集的計數給予了我最重要的項目。如果這是合理的話,就會失去在哪裏完善語句以在分組內完成此操作。 – Quest