Mysql

MySQL 上的 COUNT()、GROUP BY 和 GROUP_CONCAT()

  • May 4, 2018

我的問題很簡單。我只想計算來自每個客戶端的事件並將它們呈現在逗號分隔的單行中。

我有這張桌子:

+----+----------------+
| id | event          |
+----+----------------+
| 22 | a              |
| 23 | bb             |
| 24 | bb             |
| 25 | ccc            |
| 26 | ccc            |
| 27 | ccc            |
+----+----------------+
6 rows in set (0.01 sec)

到目前為止,我有以下查詢:

SELECT COUNT(event) AS total FROM test_table GROUP BY event;

這給了我以下結果:

+--------------+
| count(event) |
+--------------+
|            1 |
|            2 |
|            3 |
+--------------+

我正在嘗試使用GROUP_CONCAT()以將它們顯示在一行中,就像這樣,但是我嘗試了所有不同的方法,但沒有得到想要的結果:

+--------------+
| result       |
+--------------+
| 1, 2, 3      |
+--------------+

你知道如何做到這一點嗎?

提前致謝!

為了創建您想要的結果,我使用了一個子查詢並GROUP_CONCAT()從那裡使用。

create table test
(
 id int,
 event varchar(3)
 );
 insert into test
 values
 (22,'a'),(23,'bb'),(24,'bb'),(25,'ccc'),(26,'ccc'),(27,'ccc')


select group_concat(total)
from
(
SELECT COUNT(event) AS total FROM test GROUP BY event
 )a

+---------------------+
|group_concat(total)  |
+---------------------+
|1,2,3                |
+---------------------+

DB小提琴

您可以通過這種方式按事件分組:

select event, 
      group_concat(id, ',') ids, 
      count(*) cnt
from   events
group by event;
select event, group_concat(id, ',') ids, count(*) cnt
from   events
group by event
活動 | 身份證 | cnt
:---- | :---------- | --:
一個 | 22, | 1
bb | 23,,24, | 2
抄送 | 25,, 26,, 27, | 3

db<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/205832