在資料中找尋重複的欄位是很常見的,本篇就是記錄要如何算出重複的資料,以及每筆資料的重複數量。
會使用到GROUP BY
、HAVING
、COUNT
等語法。
本篇運作環境
- MySQL Server:MySQL Version: 5.7.33、8.0.21
- MySQLWorkBench:Version: 8.0.17
資料處理中,很常要在找出重複的資訊,並且計算重複的次數。
本篇範例是在資料庫中搜尋出客戶有相同手機號碼的資料。
背景
在資料庫中,有一個CUSTOMER
的table,裡面有個手機電話CELLPHONE
的欄位,還有狀態STATUS
的欄位。我們需要的是從table中找出還有效的客戶,並且手機重複。
資料大概會長這樣:
ID | CELLPHONE | STATUS |
1 | 09111222333 | Y |
2 | 0933222111 | N |
作法
- 找出重複的欄位值
使用語法,用GROUP BY
加上HAVING COUNT(*) > 1
的方式:
SELECT CELLPHONE FROM CUSTOMER WHERE STATUS = 'Y' GROUP BY CELLPHONE HAVING COUNT(*) > 1;
這是用當我們用GROUP BY {所要區分欄位名, 欄位名2…} HAVING COUNT(*) > 1
,這樣就可以根據GROUP BY
的欄位進行整理,並且把數量超過1(使用HAVING COUNT(*) > 1
)的抓出來。這樣重複的值就出來囉,而且可以多個選項做整理。
- 找出重複的欄位值,並計算數量
可以找到重複的值後,很容易收到這樣的任務:這些重複資料各有多少筆。
這時候就把上面的語法再增加一個計算欄位:
SELECT CELLPHONE, COUNT(*) as number FROM CUSTOMER WHERE STATUS = 'Y' GROUP BY CELLPHONE HAVING COUNT(*) > 1;
只要增加COUNT(*)
(使用COUNT(1)
也有相同的效果),就可以計算出重複的數量為何,也就是跟HAVING COUNT(*) > 1
相同的概念。
~Copyright by Eyelash500~
IT技術文章:EY*研究院
iT邦幫忙:eyelash*睫毛
Blog:睫毛*Relax
Facebook:睫毛*Relax