Kontingenční tabulky usnadňují analýzu dat a získání užitečných trendů. Možná však budete muset zautomatizovat dotazy kontingenční tabulky, abyste je často používali. Protože MySQL nemá funkci pro vytváření kontingenčních tabulek, musíte napsat SQL dotaz pro automatizaci kontingenčních tabulek v MySQL. Pojďme se tedy podívat na to, jak automatizovat dotazy kontingenční tabulky v MySQL
Jak automatizovat dotazy na kontingenční tabulky v MySQL
Zde jsou kroky k automatizaci dotazů kontingenční tabulky v MySQL. Řekněme, že máte následující tabulku
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 | +------+------------+------------+-------------+
Řekněme, že chcete tabulku otočit podle zkoušky sloupec tak, aby se vytvořil 1 řádek pro každé id_schůzky a 1 sloupec pro každý klíč_pole, jak je uvedeno níže.
+------------+-------------+-------------+-------------+ | Meeting_id | first_name | last_name | occupation | +------------+-------------+-------------+-------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+-------------+-------------+-------------+
Automatizujte dotazy na kontingenční tabulky
Pokud již znáte počet sloupců, které mají být vytvořeny, můžete vytvořit dotazy na kontingenční tabulku pomocí příkazu CASE a vytvořit kontingenční tabulku.
Mnohokrát však neznáte sloupce, které potřebujete vytvořit v kontingenčních tabulkách. V takových případech můžete dynamicky vytvářet kontingenční tabulky pomocí následujícího dotazu.
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when exam = ''', exam, ''' 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;
Ve výše uvedených příkazech vám GROUP_CONCAT umožňuje zřetězit hodnoty field_key z více řádků do jednoho řetězce. Ve výše uvedeném dotazu používáme GROUP_CONCAT k dynamickému vytváření příkazů CASE na základě jedinečných hodnot ve sloupci field_key a uložení do proměnné @sql, která se pak použije k vytvoření našeho výběrového dotazu. Pomáhá vám tedy automatizovat dotazy na kontingenční tabulky v MySQL
+------------+------------+-----------+------------+ | Meeting_id | first_name | last_name | occupation | +------------+------------+-----------+------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+------------+-----------+------------+
Nyní, když víte, jak automatizovat dotazy kontingenční tabulky v MySQL, můžete je upravit podle svých požadavků přidáním klauzule WHERE nebo JOINS.
Pokud chcete jako sloupce pivotovat pouze vybrané hodnoty řádků, můžete do prvního příkazu select GROUP_CONCAT přidat klauzuli WHERE.
SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when field_key = ''', field_key, ''' then field_value end) ', field_key ) ) INTO @sql FROM Meeting WHERE <condition>;
Pokud chcete ve své konečné kontingenční tabulce filtrovat řádky, můžete do příkazu SET přidat klauzuli WHERE.
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting WHERE <condition> GROUP BY Meeting_id');
Podobně můžete také použít JOINS ve svém dotazu SQL, zatímco dynamicky transponujete řádky do sloupců v MySQL.
Dotazy kontingenční tabulky můžete automatizovat pomocí nástroje pro vytváření sestav. Zde je příklad automatické kontingenční tabulky vytvořené pomocí Ubiq.
Věděli jste, že v Ubiq můžete vytvářet kontingenční tabulky pouhým přetažením?
Pokud chcete vytvářet kontingenční tabulky, grafy, dashboardy a sestavy z databáze MySQL, můžete zkusit Ubiq. Nabízíme 14denní bezplatnou zkušební verzi.