Осигурените таблици улесняват анализирането на големи обеми данни чрез организиране на информация в по-малък, управляем набор от данни. Въпреки това, няма вградена функция за постигане на въртене в MySQL. Трябва да напишем SQL заявка за преобразуване на ред в колона в MySQL и след това да създадем централен отчет в MySQL. Така че нека да разгледаме как да създадем динамични централни таблици в MySQL.
Как да създадете динамични обобщени таблици в MySQL
Ако искате да създадете централна таблица в MySQL, обикновено използвате оператори IF/CASE. Този подход обаче работи само когато вече знаете всички колони, които трябва да създадете в обобщена таблица.
Как създавате динамични централни таблици в MySQL, когато не знаете колоните, които да бъдат създадени, или ако очаквате те да се променят с течение на времето? В такива случаи използваме GROUP_CONCAT функция.
Да приемем, че имате следната таблица
CREATE TABLE Meeting ( ID INT, Meeting_id INT, field_key VARCHAR(100), field_value VARCHAR(100) ); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (1, 1,'first_name' , 'Alec'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (2, 1,'last_name' , 'Jones'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (3, 1,'occupation' , 'engineer'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (4,2,'first_name' , 'John'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (5,2,'last_name' , 'Doe'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (6,2,'occupation' , 'engineer'); +------+------------+------------+-------------+ | ID | Meeting_id | field_key | field_value | +------+------------+------------+-------------+ | 1 | 1 | first_name | Alec | | 2 | 1 | last_name | Jones | | 3 | 1 | occupation | engineer | | 4 | 2 | first_name | John | | 5 | 2 | last_name | Doe | | 6 | 2 | occupation | engineer | +------+------------+------------+-------------+
Да приемем, че искате да създадете динамична централна таблица, така че да се създаде нова колона за всяка уникална стойност в field_key колона, това е (първо_име, фамилия, професия)
+------------+-------------+-------------+-------------+ | Meeting_id | first_name | last_name | occupation | +------------+-------------+-------------+-------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+-------------+-------------+-------------+
Създаване на динамични обобщени таблици в MySQL
Ако вече знаете кои колони да създадете в осевната таблица, можете да използвате оператор CASE, за да създадете обобщена таблица. Въпреки това, за да създадем динамични централни таблици в MySQL, ние използваме GROUP_CONCAT функция за динамично транспониране на редове в колони, както е показано по-долу.
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when field_key = ''', field_key, ''' then field_value end) ', field_key ) ) INTO @sql FROM Meeting; SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting GROUP BY Meeting_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
GROUP_CONCAT ви позволява да конкатенирате стойности от множество редове в един низ. В горната заявка използваме GROUP_CONCAT за динамично създаване на CASE изрази въз основа на уникални стойности в field_key колона и съхранявайте този низ в @sql променлива. След това се използва за създаване на нашата заявка за избор.
+------------+------------+-----------+------------+ | Meeting_id | first_name | last_name | occupation | +------------+------------+-----------+------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+------------+-----------+------------+
По този начин можете да автоматизирате заявките за централна таблица в MySQL.
Можете да персонализирате горната заявка според вашите изисквания, като добавите клауза WHERE или JOINS.
Ако искате да завъртите само избраните стойности на редове като колони, можете да добавите клауза WHERE във вашия 1-ви оператор за избор GROUP_CONCAT, както е показано в удебелен по-долу
SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when field_key = ''', field_key, ''' then field_value end) ', field_key ) ) INTO @sql FROM Meeting WHERE <condition>;
Ако искате да филтрирате редове във вашата крайна обобщена таблица, можете да добавите клаузата WHERE в оператора SET, както е показано в удебелен по-долу.
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting WHERE <condition> GROUP BY Meeting_id');
По същия начин можете да приложите JOINS във вашата SQL заявка, докато създавате динамични централни таблици в MySQL.
След като създадете динамични централни таблици в MySQL, можете да използвате инструмент за отчитане, за да го начертаете в таблица. Ето пример за централна таблица, създадена с Ubiq.
Знаете ли, че можете да създавате динамични централни таблици в Ubiq, без да пишете SQL?
Между другото, ако искате да създадете централни таблици, диаграми и табла за управление от MySQL база данни, можете да опитате Ubiq. Предлагаме 14-дневен безплатен пробен период.