


How Can I Efficiently Retrieve Rows with the Maximum Value per Group in a Relational Database?
Jan 21, 2025 am 08:03 AMEfficiently Finding Maximum Values within Groups in Relational Databases
Extracting rows containing the maximum values for specific columns while maintaining group integrity within relational databases can be complex. This article addresses the challenge of retrieving the row with the highest round number for each unique ID, prioritizing query efficiency.
One method uses subqueries:
SELECT * FROM (SELECT id, round, CASE WHEN (MAX(round) OVER (PARTITION BY id)) = round THEN score ELSE NULL END score FROM SCORES where id in (1,2,3) ) scorevals WHERE scorevals.round is not null;
However, this approach is inefficient due to the post-processing filtering step.
For improved performance, consider using window functions:
SELECT DISTINCT id ,max(round) OVER (PARTITION BY id) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;
This query employs window functions to determine the maximum round for each ID and then retrieves the corresponding score. The DISTINCT
keyword ensures a single row per ID.
A potentially faster alternative, using the same window function twice:
SELECT DISTINCT id ,first_value(round) OVER (PARTITION BY id ORDER BY round DESC) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;
Both optimized solutions avoid unnecessary filtering, leading to faster query execution times compared to the subquery approach.
The above is the detailed content of How Can I Efficiently Retrieve Rows with the Maximum Value per Group in a Relational Database?. For more information, please follow other related articles on the PHP Chinese website!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Reduce the use of MySQL memory in Docker

How do you alter a table in MySQL using the ALTER TABLE statement?

How to solve the problem of mysql cannot open shared library

Run MySQl in Linux (with/without podman container with phpmyadmin)

What is SQLite? Comprehensive overview

Running multiple MySQL versions on MacOS: A step-by-step guide

What are some popular MySQL GUI tools (e.g., MySQL Workbench, phpMyAdmin)?

How do I configure SSL/TLS encryption for MySQL connections?
