跳到主要內容跳到頁尾

獎牌榜怎麼排序與排名:金銀銅逐欄比較,同牌並列不拆名次

5 分鐘閱讀摘要與日期

用 SORT 依金、銀、銅排序,再用 COUNTIFS 算有幾隊排在前面,建立同牌並列、下一名跳號的獎牌榜。保留零獎牌隊伍、排除空隊名,並用 100 面銀牌與銅牌示範固定加權為什麼會算錯。

發布

文章目錄

我想做一張獎牌榜:先比金牌,金牌相同再比銀牌,最後才比銅牌。SORT 可以把隊伍照順序排好,不過旁邊的「第幾名」要另外算,完全同牌的兩隊也得保留同一個名次。

這篇用合成隊伍練習這套自訂規則,沒有套用任何賽事的官方排名辦法。隊名只是識別用,金、銀、銅都填非負整數;隊名留空代表這列不入榜,名字是 Zero 的隊伍則是有效的零獎牌隊伍。

先把規則與資料放好

比較方式是這樣:

  • 金牌多的排前面,銀牌與銅牌再多也不能超過它。
  • 金牌相同時,銀牌多的排前面。
  • 金牌、銀牌都相同時,才比較銅牌。
  • 三種都相同就並列。前面若有兩隊並列第 2,下一隊是第 4。

下面這份資料貼到 A1。空隊名那列的 A6 要真的留空,不要填「空白」兩個字;我刻意把隊伍順序打亂,讓名次不依賴目前誰在上面。

複製後貼到 A1,欄位以 Tab 分隔
隊伍	金	銀	銅
Silver100	0	100	100
TwinB	2	1	1
Gold1	1	0	0
Top	3	0	0
0	0	0
Next	2	1	0
Bronze100	0	0	100
TwinA	2	1	1
Zero	0	0	0

先手動比兩組:Top 的金牌最多,所以在前面;TwinA 與 TwinB 的三種獎牌都相同,名次應該一樣。Gold1 雖然只有一面金牌,仍然要排在沒有金牌的 Silver100 前面,這是這次規則最需要守住的地方。

用 COUNTIFS 算有幾隊在前面

我算名次時,會先問「有幾隊比我前面」,再加 1。想看單欄排名,可以先看 RANK 與百分位函式;這次要比較三欄,我用 COUNTIFS 分組計算。

在 E1 填「競賽名次」,E2 輸入這條,再向下填到 E10:

Google 試算表公式
fx

有幾隊金更多、同金銀更多,或同金銀而銅更多,再加 1

=IF( A2="", "", 1 + COUNTIFS($A$2:$A$10, "<>", $B$2:$B$10, ">"&B2) + COUNTIFS($A$2:$A$10, "<>", $B$2:$B$10, B2, $C$2:$C$10, ">"&C2) + COUNTIFS( $A$2:$A$10, "<>", $B$2:$B$10, B2, $C$2:$C$10, C2, $D$2:$D$10, ">"&D2 ) )

這條雖然長,裡面只有三組計數,而且彼此不重複:

  • 第一組只數「金牌比這隊多」的隊伍。
  • 第二組數「金牌相同,而且銀牌比這隊多」的隊伍。
  • 第三組數「金牌、銀牌都相同,而且銅牌比這隊多」的隊伍。

每組都加上隊名不為空的條件,也就是 $A$2:$A$10,"<>"。最外層的 IF 則讓空隊名那一列自己也不顯示名次。$ 鎖住的是全部隊伍的比較範圍,B2、C2、D2 則要跟著目前的列往下換。

E2:E10 的結果如下:

列隊伍E:競賽名次
2Silver1006
3TwinB2
4Gold15
5Top1
6(A6 留空)(空白)
7Next4
8Bronze1007
9TwinA2
10Zero8

TwinA 與 TwinB 前面都只有 Top,所以都得到 2。Next 前面有 Top、TwinA、TwinB 共三隊,因此得到 4。這種並列後跳號的名次,跟把每一列編成流水號不同喔!

排成金、銀、銅的順序

名次算好後,再把 A:E 整列一起排序。I1:M1 依序填「隊伍、金、銀、銅、競賽名次」,I2 輸入:

Google 試算表公式
fx

排除空隊名,依金銀銅遞減,同牌時按隊名遞增顯示

=SORT(FILTER(A2:E10,A2:A10<>""),2,FALSE,3,FALSE,4,FALSE,1,TRUE)

FILTER 先排除空隊名;SORT 接到五欄資料後,依第 2、3、4 欄由大到小排,最後再依第 1 欄隊名由小到大排。FALSE 是遞減,TRUE 是遞增。

來看看結果,I2:M9:

隊伍金銀銅競賽名次
Top3001
TwinA2112
TwinB2112
Next2104
Gold11005
Silver10001001006
Bronze100001007
Zero0008

最後那組隊名排序只是讓畫面穩定,TwinA 顯示在 TwinB 前面,兩隊仍然都是第 2 名。我沒有把隊名放進 E 欄的名次比較,所以它不會變成打破並列的條件。

如果只想取榜單前幾列,可以再看 SORTN 取前 N 名。SORTN 負責排序與保留列,這裡的競賽名次仍然由 E 欄計算。

為什麼不把獎牌乘權重?

常見做法是金牌乘 10000、銀牌乘 100,再加銅牌。我不採用這個版本,因為它得先保證下位獎牌不會累加到超過上一層;這份資料故意放了超過這個假設的隊伍。

想親自看錯在哪,可以在 G1 填「錯誤加權示範」,G2 貼這條,向下填到 G10。這條只用來重現錯誤,不要拿它當名次公式:

Google 試算表公式
fx

刻意錯誤的固定加權示範,不能用來取代逐欄比較

=IF(A2="","",B2*10000+C2*100+D2)

同一份資料裡,Silver100 的加權值是 10100,Gold1 是 10000。如果直接照加權值由大到小排,沒有金牌的 Silver100 反而會超過有一面金牌的 Gold1。回到逐欄比較,E 欄給 Gold1 第 5、Silver100 第 6,才符合一開始訂的規則。

新增隊伍時要改哪裡?

這個練習把比較範圍固定到第 10 列。下一隊加在第 11 列時,要擴大 E 欄公式裡所有 A、B、C、D 的比較範圍,把名次公式填到新列,並一起擴大 I2 裡 FILTER 的 A:E 資料範圍與 A 欄條件範圍。

隊伍多了之後,還是先核對「排我前面的隊伍有哪些」,比直接盯著長公式好除錯。我是喜特先生,Mr. Sheet,我們下個教學見!

分享:
#獎牌榜#多欄排名#SORT#COUNTIFS#並列名次
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。