Tags: MySQL

Jak mogę SELECT wiersze z MAX(wartość kolumny), PARTITION przez inną kolumnę w MYSQL?

Aby wykonać zapytanie `SELECT` i wybrać wiersze z maksymalną wartością kolumny, podzielone (partycjonowane) przez inną kolumnę w MySQL, możesz użyć funkcji agregującej `MAX()` w połączeniu z klauzulą `PARTITION BY`. Jednak MySQL nie obsługuje bezpośrednio klauzuli `PARTITION BY` w kontekście `SELECT`. Zamiast tego, możesz osiągnąć ten efekt za pomocą złącz i podzapytań. Oto przykład:

Przyjmijmy, że masz tabelę o nazwie `my_table` z następującymi kolumnami: `id`, `group_id`, `value`. Chcesz wybrać wiersze z maksymalną wartością `value` w każdej grupie opisanej przez kolumnę `group_id`.

SELECT t1.*
FROM my_table t1
JOIN (
SELECT group_id, MAX(value) AS max_value
FROM my_table
GROUP BY group_id
) t2
ON t1.group_id = t2.group_id AND t1.value = t2.max_value;

W powyższym zapytaniu wykonujemy następujące kroki:

Wewnętrzne zapytanie (`SELECT group_id, MAX(value) AS max_value`) grupuje dane według kolumny `group_id` i oblicza maksymalną wartość `value` w każdej grupie.

Zewnętrzne zapytanie dołącza wiersze z tabeli `my_table` do wyników wewnętrznego zapytania. Dołączanie odbywa się na podstawie wartości `group_id` i `value`, co zapewnia wybranie wierszy z maksymalną wartością w każdej grupie.

Dzięki tej konstrukcji uzyskasz wiersze z maksymalną wartością kolumny `value` podzielone (partycjonowane) przez kolumnę `group_id`.