web-dev-qa-db-ja.com

MySQLでのCOUNT()、GROUP BY、GROUP_CONCAT()の組み合わせ

私の質問は非常に簡単です。各クライアントからのイベントをカウントし、それらをコンマ区切りの単一行に表示したいだけです。

私はこのテーブルを持っています:

_+----+----------------+
| 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()を使用して1行で表示しようとしていますが、さまざまな方法をすべて試しましたが、目的の結果が得られませんでした。

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

それを行う方法についての手がかりはありますか?

前もって感謝します!

2
LucasBr

必要な結果を作成するために、サブクエリを使用し、そこから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フィドル

2
Shaulinator

次のようにして、イベントごとにグループ化できます。

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
イベント| ID | cnt 
:- :---------- | -:
 a | 22、| 1 
 bb | 23、24、| 2 
 ccc | 25、26、27、| 3 

db <> fiddle ---(ここ

2
McNets