Обобщените таблици са полезни за анализ на данни, позволяват ви да показвате стойностите на редове като колони за лесно получаване на информация. Въпреки това, няма функция за създаване на централна таблица в MySQL. Така че, трябва да напишете SQL заявка, за да създадете централна таблица в MySQL. За щастие има много начини за създаване на обобщена таблица в MySQL. Нека разгледаме бързо всеки един от тях.
Как да създадете обобщена таблица в MySQL
Ето стъпките за създаване на централна таблица в MySQL. Да приемем, че имате следната таблица
CREATE TABLE exams ( id int(11) NOT NULL auto_increment, name varchar(15), exam int, score int, PRIMARY KEY (id) ); insert into exams (name,exam,score) values ('Bob',1,70); insert into exams (name,exam,score) values ('Bob',2,77); insert into exams (name,exam,score) values ('Bob',3,71); insert into exams (name,exam,score) values ('Bob',4,70); insert into exams (name,exam,score) values ('Sue',1,89); insert into exams (name,exam,score) values ('Sue',2,87); insert into exams (name,exam,score) values ('Sue',3,88); insert into exams (name,exam,score) values ('Sue',4,89); mysql> select * from exams; +------+------+------+-------+ | id | name | exam | score | +------+------+------+-------+ | 1 | Bob | 1 | 70 | | 2 | Bob | 2 | 77 | | 3 | Bob | 3 | 71 | | 4 | Bob | 4 | 70 | | 5 | Sue | 1 | 89 | | 6 | Sue | 2 | 87 | | 7 | Sue | 3 | 88 | | 8 | Sue | 4 | 89 | +------+------+------+-------+
Да приемем, че искате да завъртите таблицата чрез изпит колона, така че да създадете 1 ред за всеки студент и 1 колона за всеки изпит, както е показано по-долу.
+--------+-----------+-----------+-----------+------------+ | name | exam1 | exam2 | exam3 | exam4 | +--------+-----------+-----------+-----------+------------+ | Bob | 70 | 77 | 71 | 70 | | Sue | 89 | 87 | 88 | 89 | +--------+-----------+-----------+-----------+------------+
Можете да създадете централна таблица в MySQL, като използвате оператор IF или CASE.
Бонус за четене: Как да изчислим медиана в MySQL
Създайте обобщена таблица в MySQL с помощта на оператор IF
Ето SQL заявката за транспониране на редове в колони с помощта на оператор IF.
SELECT name, sum(IF(exam=1, score, NULL)) AS exam1, sum(IF(exam=2, score, NULL)) AS exam2, sum(IF(exam=3, score, NULL)) AS exam3, sum(IF(exam=4, score, NULL)) AS exam4 FROM exams GROUP BY name; +--------+-----------+-----------+-----------+------------+ | name | exam1 | exam2 | exam3 | exam4 | +--------+-----------+-----------+-----------+------------+ | Bob | 70 | 77 | 71 | 70 | | Sue | 89 | 87 | 88 | 89 | +--------+-----------+-----------+-----------+------------+
В горната заявка трябва дагрупирате по име колона, тъй като искате 1 ред за всеки ученик. Освен това трябва да предоставите 1 условие за всяка колона, която трябва да създадете, тоест 1 условие за всеки изпит
Създайте обобщена таблица в MySQL с помощта на оператор CASE
Ето SQL заявката за преобразуване на редове в колони с помощта на оператор CASE.
SELECT name, sum(CASE WHEN exam=1 THEN score ELSE NULL END) AS exam1, sum(CASE WHEN exam=2 THEN score ELSE NULL END) AS exam2, sum(CASE WHEN exam=3 THEN score ELSE NULL END) AS exam3, sum(CASE WHEN exam=4 THEN score ELSE NULL END) AS exam4 FROM exams GROUP BY name; +--------+-----------+-----------+-----------+------------+ | name | exam1 | exam2 | exam3 | exam4 | +--------+-----------+-----------+-----------+------------+ | Bob | 70 | 77 | 71 | 70 | | Sue | 89 | 87 | 88 | 89 | +--------+-----------+-----------+-----------+------------+
Горната заявка работи подобно на тази, която използва IF условие по-горе. Трябва да групирате по колоната, по която искате да завъртите данните си, тоест име . Освен това трябва да дефинирате 1 оператор CASE за всеки номер на изпит, тъй като искате да създадете отделни колони за всеки изпит.
Можете също да комбинирате резултатите от изпитите във вашата основна таблица. Например, ако искате да добавите резултати от изпит 1 и изпит 2 и да ги покажете в една и съща колона, можете да използвате следната заявка.
SELECT name, sum(CASE WHEN exam=1 or exam=2 THEN score ELSE NULL END) AS exam12, sum(CASE WHEN exam=3 THEN score ELSE NULL END) AS exam3, sum(CASE WHEN exam=4 THEN score ELSE NULL END) AS exam4 FROM exams GROUP BY name; +--------+------------+-----------+-----------+------------+ | name | exam12 | exam2 | exam3 | exam4 | +--------+------------+-----------+-----------+------------+ | Bob | 147 | 77 | 71 | 70 | | Sue | 176 | 87 | 88 | 89 | +--------+------------+-----------+-----------+------------+
В таблицата по-горе резултатите от изпит 1 и изпит 2 са добавени и показани в една колона exam12, като просто се промени условието на 1-ви израз CASE и се премахне вторият израз CASE.
Можете да персонализирате горните заявки според вашето изискване за създаване на централна таблица в MySQL. Можете също да използвате инструмент за отчитане, за да начертаете резултата в таблица. Ето пример за таблица, създадена с Ubiq.
Знаете ли, че можете да създавате централни таблици в Ubiq, като използвате просто плъзгане и пускане?
Ако искате да създадете централни таблици, диаграми и табла за управление от MySQL база данни, можете да опитате Ubiq. Предлагаме 14-дневен безплатен пробен период.