Czasami może być konieczne obliczenie procentu kolumny (np. sprzedaży, przychodów) w danych, aby zrozumieć, jaki procent łącznej wartości kolumny pochodzi z każdego wiersza (np. kraj, stan itp.). Ponieważ nie ma gotowej funkcji do obliczenia tej wartości, musisz napisać dla niej zapytanie SQL. Oto jak obliczyć procent kolumny w MySQL
Jak obliczyć procent kolumny w MySQL
Załóżmy, że masz poniższą tabelę, jak pokazano poniżej.
mysql> create table sales(rep varchar(255),sale int); mysql> insert into sales values('Bob',15),('Sally',30),('Peter',15); mysql> select * from sales; +-------+------+ | rep | sale | +-------+------+ | Bob | 15 | | Sally | 30 | | Peter | 15 | +-------+------+
Załóżmy, że chcesz wyświetlić kolumnę „procent całości”, która jest po prostu procentem całkowitej sprzedaży kolumna, jak pokazano poniżej.
+-------+------+------------------+ | rep | sale | percent of total | +-------+------+------------------+ | Bob | 15 | 25 | | Sally | 30 | 50 | | Peter | 15 | 25 | +-------+------+------------------+
Możesz to zrobić na wiele sposobów, używając tylko jednego zapytania. Nie ma potrzeby pisania oddzielnych zapytań do obliczania sumy i procentu. Przyjrzyjmy się każdemu z nich
Przeczytaj dodatkowe: Jak obliczyć procent dwóch kolumn w MySQL
Jak obliczyć procent kolumny w MySQL za pomocą CROSS JOIN
Aby obliczyć procent kolumny w MySQL, możesz po prostu skrzyżować sum() sprzedaży kolumna z oryginalną tabelą.
SELECT Rep, Sale, Sale * 100 / t.s AS `percent of total` FROM sales CROSS JOIN (SELECT SUM(sale) AS s FROM sales) t; +-------+------+------------------+ | rep | sale | percent of total | +-------+------+------------------+ | Bob | 15 | 25 | | Sally | 30 | 50 | | Peter | 15 | 25 | +-------+------+------------------+
Jeśli chcesz dodać klauzulę where do filtrowania danych, musisz umieścić ją po CROSS JOIN, jak pokazano poniżej. W przeciwnym razie pojawi się błąd.
SELECT Rep, Sale, Sale * 100 / t.s AS `percent of total` FROM sales CROSS JOIN (SELECT SUM(sale) AS s FROM sales) t where Rep='Bob'; +------+------+------------------+ | Rep | Sale | percent of total | +------+------+------------------+ | Bob | 15 | 25 | +------+------+------------------+
Jeśli jednak chcesz dodać klauzulę where podczas sumowania kolumny, musisz dodać ją w klauzuli select sumy, jak pokazano poniżej. Powiedzmy, że chcesz wykluczyć Boba z samej sumy, a następnie oto zapytanie, które to zrobi.
SELECT Rep, Sale, Sale * 100 / t.s AS `percent of total` FROM sales CROSS JOIN (SELECT SUM(sale) AS s FROM sales where Rep<>'Bob') t where Rep<>'Bob'; +-------+------+------------------+ | Rep | Sale | percent of total | +-------+------+------------------+ | Sally | 30 | 66.6667 | | Peter | 15 | 33.3333 | +-------+------+------------------+
Przeczytaj bonus: Jak obliczyć procentowy wzrost z tygodnia na tydzień w MySQL
Jak obliczyć procent kolumny w MySQL za pomocą SUBSELECT/SUBQUERY
Możesz również obliczyć procent kolumny za pomocą podselekcji, zamiast używać JOIN, jak pokazano poniżej.
SELECT Rep, Sale, Sale * 100 / (SELECT SUM(sale) AS s FROM sales) AS `percent of total` FROM sales; +-------+------+------------------+ | rep | sale | percent of total | +-------+------+------------------+ | Bob | 15 | 25 | | Sally | 30 | 50 | | Peter | 15 | 25 | +-------+------+------------------+
Jeśli chcesz dodać klauzulę where do filtrowania danych, musisz umieścić ją po CROSS JOIN, jak pokazano poniżej. W przeciwnym razie pojawi się błąd.
SELECT Rep, Sale, Sale * 100 / (SELECT SUM(sale) AS s FROM sales) AS `percent of total` FROM sales where Rep='Bob'; +--------+--------+-------------------+ | Rep | Sale | percent of total | +--------+--------+-------------------+ | Bob | 15 | 25 | +--------+--------+-------------------+
Jeśli jednak chcesz dodać klauzulę where podczas sumowania kolumny, musisz dodać ją w klauzuli select sumy. Powiedzmy, że chcesz wykluczyć Boba z samej sumy, a następnie oto zapytanie, które to zrobi.
SELECT Rep, Sale, Sale * 100 / (SELECT SUM(sale) AS s FROM sales where Rep='Bob') AS `percent of total` FROM sales where Rep='Bob'; +-------+------+------------------+ | Rep | Sale | percent of total | +-------+------+------------------+ | Sally | 30 | 66.6667 | | Peter | 15 | 33.3333 | +-------+------+------------------+
Możesz dostosować powyższe zapytania zgodnie z wymaganiami, aby obliczyć procent kolumny w MySQL.
Ponadto możesz użyć narzędzia do raportowania, aby wykreślić dane na wykresie kołowym lub pulpicie nawigacyjnym. Oto przykład wykresu kołowego utworzonego za pomocą Ubiq.
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.