簡體   English   中英

MySql:查找按列分組的SUM的最大值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM