GROUP_CONCAT groups together character strings. : GROUP_CONCAT « Aggregate Functions « SQL / MySQL






GROUP_CONCAT groups together character strings.

    
mysql>
mysql> CREATE TABLE authors (
    ->   authID int(11) NOT NULL auto_increment PRIMARY KEY ,
    ->   authName varchar(60),
    ->   ts timestamp
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql>
mysql>
mysql>
mysql> INSERT INTO authors VALUES (1,'Tom','2004-12-02 18:36:51'),
    ->                              (2,'Jack','2004-12-02 18:36:51'),
    ->                              (3,'Jane','2004-12-02 18:36:51'),
    ->                              (4,'Amy','2004-12-02 18:36:51'),
    ->                              (5,'Bob','2004-12-02 18:36:51'),
    ->                              (6,'Race','2004-12-02 18:36:51'),
    ->                              (7,'Green','2004-12-02 18:36:51');
Query OK, 7 rows affected (0.00 sec)
Records: 7  Duplicates: 0  Warnings: 0

mysql>
mysql>
mysql> CREATE TABLE rel_title_author (
    ->   titleID int(11),
    ->   authID int(11),
    ->   ts timestamp ,
    ->   PRIMARY KEY  (titleID,authID)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql>
mysql>
mysql> INSERT INTO rel_title_author VALUES (1,1,'2004-12-02 18:37:09'),
    ->                                       (2,1,'2004-12-02 18:37:09'),
    ->                                       (2,2,'2004-12-02 18:37:09'),
    ->                                       (3,3,'2005-02-24 10:46:37'),
    ->                                       (3,4,'2005-02-24 10:46:37'),
    ->                                       (3,5,'2005-02-24 10:46:37'),
    ->                                       (4,6,'2004-12-02 18:37:09');
Query OK, 7 rows affected (0.00 sec)
Records: 7  Duplicates: 0  Warnings: 0

mysql>
mysql>
mysql> CREATE TABLE titles (
    ->   titleID int(11),
    ->   title varchar(100),
    ->   subtitle varchar(100),
    ->   edition tinyint(4),
    ->   publID int(11),
    ->   catID int(11),
    ->   langID int(11),
    ->   year int(11),
    ->   isbn varchar(20),
    ->   comment varchar(255),
    ->   ts timestamp,
    ->   authors varchar(255),
    ->   PRIMARY KEY  (titleID)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql>
mysql>
mysql> INSERT INTO titles VALUES (1,'Linux','Installation',5,1,57,2,2000,NULL,NULL,'2005-02-28 13:34:21','Michael'),
    ->                           (2,'Excel',NULL,NULL,2,3,NULL,2000,NULL,NULL,'2005-02-28 13:34:22','David'),
    ->                           (3,'XML',NULL,NULL,1,2,NULL,1997,NULL,NULL,'2005-02-28 13:34:22','Edwards'),
    ->                           (4,'PHP',NULL,NULL,3,6,NULL,2000,NULL,NULL,'2005-02-28 13:34:22','Tom'),
    ->                           (5,'MySQL','',0,3,34,NULL,2000,'','','2005-02-28 13:34:22','Paul'),
    ->                           (6,'Java',NULL,NULL,4,34,NULL,1999,NULL,NULL,'2005-02-28 13:34:22','Tim');
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql>
mysql>
mysql> SELECT title,
    -> GROUP_CONCAT(authname ORDER BY authname SEPARATOR ', ')
    -> AS authors,
    -> COUNT(authors.authID) AS cnt
    -> FROM authors, titles, rel_title_author
    -> WHERE authors.authID = rel_title_author.authID
    -> AND titles.titleID = rel_title_author.titleID
    -> GROUP BY titles.titleID
    -> HAVING cnt>1
    -> ORDER BY title;
+-------+----------------+-----+
| title | authors        | cnt |
+-------+----------------+-----+
| Excel | Jack, Tom      |   2 |
| XML   | Amy, Bob, Jane |   3 |
+-------+----------------+-----+
2 rows in set (0.00 sec)

mysql>
mysql> drop table authors;
Query OK, 0 rows affected (0.00 sec)

mysql> drop table titles;
Query OK, 0 rows affected (0.00 sec)

mysql> drop table rel_title_author;
Query OK, 0 rows affected (0.00 sec)

mysql>

   
    
    
    
  








Related examples in the same category

1.GROUP_CONCAT demo
2.SET @@GROUP_CONCAT_MAX_LEN=7;