[英]Select multiple rows with the MAX SUM of a value grouped by another column
[英]MySql: Finding the MAX value of the SUM grouped by column
我有一個表,其中包含名稱,項目,類型以及每個項目的計數。 我需要找到一種方法來確定每種類型中具有最大數量的名稱。
表格示例:
---------------------------------------
| name | item | type | count |
| ------------------------------------|
| Dave | carrot | vegetable | 2 |
| Dave | broccoli | vegetable | 3 |
| Tom | spinach | vegetable | 2 |
| Jon | swiss | cheese | 3 |
| Mark | cheddar | cheese | 5 |
| Jon | cheddar | cheese | 6 |
| Tony | onion | vegetable | 3 |
我想找到每種類型中SUM(count)最高的每個人的名字。 這是我的預期結果:
----------------------------
| name | type | count |
| -------------------------|
| Dave | vegetable | 5 |
| Jon | cheese | 9 |
我正在嘗試查看是否有一種優雅的方法,除了查詢每個名稱,然后手動計算MAX。
這可能不是最佳選擇,但很簡單:
SELECT name, type, MAX(count) as count FROM (
SELECT name, type, SUM(count) as count
FROM mytable
GROUP BY type, name
) as rank
GROUP BY type;
內部查詢返回每個名稱和該名稱的類型總和,例如:
NAME TYPE COUNT
Jon cheese 9
Dave vegetable 5
Mark cheese 5
Tony vegetable 3
Tom vegetable 2
然后外部查詢按類型分組,因此每種類型僅返回一個名稱,而具有max()的則返回該類型的頂級名稱。
這不會返回並列名稱,但是會為不同類型返回相同名稱,因此,如果突然給了瑞士的戴夫10名,他將成為蔬菜和奶酪行業的佼佼者。
首先計算每個名稱/類別組合的總數。 在子查詢或視圖中執行此操作。 我將選擇一種視圖來減少代碼膨脹,因為將需要多次。
CREATE VIEW totals AS
SELECT name, type, SUM(count) AS count
FROM yourtable
GROUP BY name, type
---------------------------- | name | type | count | | -------------------------| | Dave | vegetable | 5 | | Tony | vegetable | 3 | | Tom | vegetable | 2 | | Jon | cheese | 9 | | Mark | cheese | 5 | ----------------------------
現在,您需要找到每種類型的最大數量。
SELECT type, MAX(count) AS max_count
FROM totals
GROUP BY type
------------------------- | type | max_count | | ----------------------- | vegetable | 5 | | cheese | 9 | -------------------------
現在,您只需要查詢(類型,計數)等於第二個結果集中的任何對的所有行的視圖totals
。 我已經為您完成了大部分工作。 我讓你結束。
在沒有數據庫的情況下,請嘗試一下:
SELECT * FROM Table T
LEFT JOIN (SELECT type, MAX(count) AS max FROM Table GROUP BY type) AS maxType
ON T.type = maxType.type
AND t.count = max.count
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.