Czasami może być konieczne połączenie wielu wierszy w jedną kolumnę. Oto jak połączyć wiele wierszy w jedną kolumnę w MySQL za pomocą funkcji GROUP_CONCAT. Możesz go również użyć do łączenia wierszy w ciąg lub pobierania danych z wielu wierszy w jednym wierszu w MySQL.
Jak połączyć wiele wierszy w jedną kolumnę w MySQL
Oto kroki, aby połączyć wiele wierszy w jedną kolumnę w MySQL.
Załóżmy, że masz następującą tabelę sprzedaży (przedstawiciel_sprzedaży, wyprzedaż)
mysql> create table sales(sales_rep varchar(255),sale int); mysql> insert into sales(sales_rep, sale) values('Albert',10),('Bob',23), ('Chris',20),('Dave',35); mysql> select * from sales; +-----------+------+ | sales_rep | sale | +-----------+------+ | Albert | 10 | | Bob | 23 | | Chris | 20 | | Dave | 35 | +-----------+------+
Przeczytaj dodatkowe: Jak obliczyć sumę bieżącą w MySQL
Załóżmy, że chcesz zgłosić wszystkich przedstawicieli handlowych, których sprzedaż>10 za pomocą następującego zapytania.
mysql> select sales_rep from sales where sale>10;
Otrzymasz następujące dane wyjściowe
+-----------+ | sales_rep | +-----------+ | Bob | | Chris | | Dave | +-----------+
Chcemy jednak, aby nazwy przedstawicieli handlowych znajdowały się w jednym wierszu.
Bob, Chris, Dave
W tym przypadku używamy funkcji GROUP_CONCAT, aby połączyć wiele wierszy w jedną kolumnę.
mysql> select group_concat(sales_rep) from sales2 where sale>10; +-------------------------+ | group_concat(sales_rep) | +-------------------------+ | Bob,Chris,Dave | +-------------------------+
GROUP_CONCAT łączy wszystkie wartości inne niż null w grupie i zwraca je jako pojedynczy ciąg.
Jeśli chcesz uniknąć duplikatów, możesz również dodać do zapytania DISTINCT. Załóżmy, że masz poniższą tabelę.
mysql> select * from sales3; +---------+------------+------+ | product | order_date | sale | +---------+------------+------+ | A | 2020-01-01 | 20 | | B | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | A | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | +---------+------------+------+
W powyższej tabeli kolumna produkt zawiera zduplikowane wartości. Dlatego używamy słowa kluczowego DISTINCT, aby wybrać tylko unikalne wartości.
mysql> select group_concat(distinct product) from sales3 where sale>10; +--------------------------------+ | group_concat(distinct product) | +--------------------------------+ | A,B | +--------------------------------+
Przeczytaj dodatkowe: Jak dodać sumę wierszy w MySQL
Możesz również użyć funkcji GROUP BY, aby połączyć wartości wierszy dla każdej grupy. Oto przykład. Załóżmy, że masz poniższą tabelę.
mysql> create table sales_reps(product varchar(255),sales_rep varchar(255)); mysql> insert into sales_reps(product, sales_rep) values('A','Albert'),('A','Bob'),('A','Chris'), ('B','Dave'),('B','Edgar'),('B','Finch'); mysql> select * from sales_reps; +---------+-----------+ | product | sales_rep | +---------+-----------+ | A | Albert | | A | Bob | | A | Chris | | B | Dave | | B | Edgar | | B | Finch | +---------+-----------+
Oto zapytanie, w którym łączymy nazwy przedstawicieli dla każdego produktu, używając klauzuli GROUP BY.
mysql> select product, group_concat(sales_rep) from sales_reps group by product; +---------+-------------------------+ | product | group_concat(sales_rep) | +---------+-------------------------+ | A | Albert,Bob,Chris | | B | Dave,Edgar,Finch | +---------+-------------------------+
Po połączeniu wielu wierszy w jedną kolumnę możesz użyć narzędzia do raportowania, aby wykreślić wyniki w tabeli i udostępnić je swojemu zespołowi. Oto przykład tabeli utworzonej za pomocą Ubiq.
Przy okazji, jeśli chcesz tworzyć wykresy, dashboardy i raporty z bazy danych MySQL, możesz wypróbować Ubiq. Oferujemy 14-dniowy bezpłatny okres próbny.