【SQL】計算出重複的欄位與數量

在資料中找尋重複的欄位是很常見的,本篇就是記錄要如何算出重複的資料,以及每筆資料的重複數量。

會使用到GROUP BYHAVINGCOUNT等語法。


本篇運作環境

  • MySQL Server:MySQL Version: 5.7.33、8.0.21
  • MySQLWorkBench:Version: 8.0.17

 

資料處理中,很常要在找出重複的資訊,並且計算重複的次數。
本篇範例是在資料庫中搜尋出客戶有相同手機號碼的資料。

背景

在資料庫中,有一個CUSTOMER的table,裡面有個手機電話CELLPHONE的欄位,還有狀態STATUS的欄位。我們需要的是從table中找出還有效的客戶,並且手機重複。

資料大概會長這樣:

IDCELLPHONESTATUS
109111222333Y
20933222111N

作法

  • 找出重複的欄位值

使用語法,用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