12月 20, 2019 MySQL
我們在使用 MySQL 時也常常會使用 Group By 功能把相同的資料整合出來,然後 Count 出結果的數目。

##### Table : people

|id|name|sex|
|---|
|1|Peter|M|
|2|Mary|F|
|3|Tom|M|
|4|Betty|F|
|5|Flex|M|
|6|Alex|M|

### 使用 count()

Count 是其中一個在 SQL 裏常用的功能,以下的 statement 可以抽出整個資料表的記錄數量。

```sql
select 
	count(*) as count 
from 
	people
```

|count|
|---|
|6|

如能配合 Group By 使用的話,就可以抽出每一個組別的記錄數量 :

```sql
select 
	count(id) as count, 
	sex 
from 
	people 
group by 
	sex
```

|count|sex|
|---|
|4|M|
|2|F|

### 使用 group_concat()

如果使用 group_concat 功能的話,就可以把欄位的值 group 起來在一格欄位轉輸出了。下面是例子

```sql
select 
	count(id) as count, 
	group_concat(id) as ids, 
	sex 
from 
	people 
group by 
	sex
```

|count|ids|sex|
|---|
|4|1,3,5,6|M|
|2|2,4|F|

### 自訂分隔符號

逗號 (Comma) 是預設的分隔符號,如果想自訂分隔符號可以使用 `separator` 語法。

```sql
select 
	count(id) as count, 
	group_concat(id separator '+') as ids, 
	sex 
from 
	people 
group by 
	sex
```

|count|ids|sex|
|---|
|4|1+3+5+6|M|
|2|2+4|F|

### 不重覆記錄

如果想 group 起來的記錄不要重覆,可以使用 `distinct` 語法。

```sql
select 
	count(id) as count, 
	group_concat(distinct id separator '+') as ids, 
	sex 
from 
	people 
group by 
	sex
```

這樣就可以保證抽出來的記錄不會重覆了。
過去文章
2025 (9)
4 (5)
3 (1)
2 (3)
2024 (25)
11 (3)
10 (3)
9 (1)
3 (18)
2022 (6)
10 (1)
6 (2)
5 (1)
3 (1)
1 (1)
2021 (21)
11 (7)
7 (1)
6 (2)
5 (2)
4 (6)
3 (2)
2 (1)
2020 (92)
12 (1)
11 (2)
10 (4)
9 (10)
8 (5)
7 (1)
6 (3)
5 (1)
4 (4)
3 (25)
2 (7)
1 (29)
2019 (57)
12 (25)
11 (7)
9 (25)