Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak oceniać partycje w MySQL?

Czasami może zajść potrzeba uszeregowania według partycji w MySQL lub zrobienia rankingu grupowego w MySQL. Przyjrzymy się, jak uszeregować nad partycją za pomocą funkcji rangowania MySQL. Możesz użyć tego podejścia do osobnego rankingu w każdej grupie/partycji w tabeli. Należy jednak pamiętać, że ta funkcja jest dostępna tylko w MySQL 8.0.


Ranking MySQL nad partycją

Użyjemy funkcji MySQL RANK() do rankingu w grupie. Oto składnia funkcji MySQL RANK.

RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
)

Funkcja rang przypisuje rangę do każdego wiersza w ramach partycji, tak że ranga każdego wiersza jest o jeden większa niż całkowita liczba wierszy, które zostały sklasyfikowane w tej partycji.

W powyższej składni klauzula PARTITION BY podzieli wiersze na partycje. Tabelę można podzielić na partycje na podstawie co najmniej jednej wartości kolumny. Jeśli nie chcesz dzielić tabeli na partycje, możesz po prostu całkowicie pominąć klauzulę PARTITION BY.


Przeczytaj bonus:Jak zmienić strefę czasową MySQL w zapytaniu

Funkcja Ranga obliczy rangę w każdej partycji/grupie i ponownie zainicjuje numer rangi przy rozpoczynaniu od nowej partycji.

Klauzula ORDER BY sortuje wiersze w każdej partycji na podstawie wartości w jednej lub kilku kolumnach.


Przeczytaj bonus:MySQL Porównaj bazy danych

Powiedzmy, że masz poniższą tabelę.

mysql> create table for_rank(id int, month  varchar(10),amount  int);

mysql> insert into for_rank(id, month, amount)
     values(1,'Jan',450),
     (2,'Jan',350),
     (3,'Jan',250),
     (4,'Feb',150),
     (5,'Feb',450),
     (6,'Feb',500),
     (7,'Mar',350),
     (8,'Mar',450),
     (9,'Mar',250),
     (10,'Mar',150);

mysql> select * from for_rank;
+------+-------+--------+
| id   | month | amount |
+------+-------+--------+
|    1 | Jan   |    450 |
|    2 | Jan   |    350 |
|    3 | Jan   |    250 |
|    4 | Feb   |    150 |
|    5 | Feb   |    450 |
|    6 | Feb   |    500 |
|    7 | Mar   |    350 |
|    8 | Mar   |    450 |
|    9 | Mar   |    250 |
|   10 | Mar   |    150 |
+------+-------+--------+


Przeczytaj bonus:MySQL pokazuje indeksy w bazach danych

Oto zapytanie, które przypisuje rangę każdemu wierszowi tabeli, bez użycia klauzuli PARTITION BY.

SELECT
     id, month, amount, RANK() OVER (
     PARTITION BY Month
     ORDER BY amount desc
     ) my_rank
FROM for_rank;

+------+-------+--------+--------+
| id   | month | amount |  rank  |
+------+-------+--------+--------+
|    6 | Feb   |    500 |     1  |
|    5 | Feb   |    450 |     2  |
|    4 | Feb   |    150 |     3  |
|    1 | Jan   |    450 |     1  |
|    2 | Jan   |    350 |     2  |
|    3 | Jan   |    250 |     3  |
|    8 | Mar   |    450 |     1  |
|    7 | Mar   |    350 |     2  |
|    9 | Mar   |    250 |     3  |
|   10 | Mar   |    150 |     4  |
+------+-------+--------+--------+

W powyższym zapytaniu dzielimy tabelę według nazwy miesiąca, a następnie szeregujemy każdy wiersz w każdej partycji w kolejności malejącej ilości.

Mam nadzieję, że teraz możesz łatwo użyć funkcji MySQL Rank do rankingu partycji i grup.

Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instalowanie MySQL na CentOS 7

  2. Wyłącz logowanie root w phpMyAdmin

  3. Odmowa dostępu dla użytkownika „root”@„localhost” podczas próby nadania uprawnień. Jak nadawać uprawnienia?

  4. MySQL #1093 - W klauzuli FROM nie można określić tabeli docelowej „prezenty” do aktualizacji

  5. Aktualizacja MySQL PRZYPADEK KIEDY / WTEDY / INACZEJ