Detailed example of getting the maximum value of each group after grouping in MySQL

Detailed example of getting the maximum value of each group after grouping in MySQL

Detailed example of getting the maximum value of each group after grouping in MySQL

1. The test database table is as follows:

create table test 
( 
  `id` int not null auto_increment, 
  `name` varchar(20) not null default '', 
  `score` int not null default 0, 
  primary key (`id`) 
)engine=InnoDB CHARSET=UTF8; 

2. Insert the following data:

mysql> select * from test; 
+----+----------+-------+ 
| id | name | score | 
+----+----------+-------+ 
| 1 | jason | 1 | 
| 2 | jason | 2 | 
| 3 | jason | 3 | 
| 4 | linjie | 1 | 
| 5 | linjie | 2 | 
| 6 | linjie | 3 | 
| 7 | xiaodeng | 1 | 
| 8 | xiaodeng | 2 | 
| 9 | xiaodeng | 3 | 
| 10 | hust | 2 | 
| 11 | hust | 3 | 
| 12 | hust | 1 | 
| 13 | haha ​​| 1 | 
| 14 | haha ​​| 2 | 
| 15 | dengzi | 3 | 
| 16 | dengzi | 4 | 
| 17 | dengzi | 5 | 
| 18 | shazi | 3 | 
| 19 | shazi | 4 | 
| 20 | shazi | 2 | 
+----+----------+-------+ 

3. The following is the key point. The purpose is to group by name , and then after grouping, get the highest score in each group. The sql is as follows

select a.* from test a inner join (select name,max(score) score from test group by name)b on a.
name=b.name and a.score=b.score order by a.name; 

Of course, the last order by a.name above can be removed

4. The test results are as follows:

+----+----------+-------+ 
| id | name | score | 
+----+----------+-------+ 
| 3 | jason | 3 | 
| 6 | linjie | 3 | 
| 9 | xiaodeng | 3 | 
| 11 | hust | 3 | 
| 14 | haha ​​| 2 | 
| 17 | dengzi | 5 | 
| 19 | shazi | 4 | 
+----+----------+-------+ 

5. Many methods on the Internet are wrong, such as the following, which will not work if tested personally

select * from (select * from test order by score desc) t group by name order by score desc limit 4; 
select score,max(score) from test group by name; 
select * from test where score in (select max(score) from test group by name); 
select * from test where score in (select substring_index(group_concat(score order by score desc separator ','),',',1) from test group by name); 
 
select * from (select name,score,ROW_NUMBER() over(group by name order by score desc) as rowNum from test) rank where rank.rowNum <=1 order by rank.score desc; 
 
select * from( select StoresNo,[CustomerCaseNo],[PaymentsTime], ROW_NUMBER() over(partition by CustomerCaseNo order by [PaymentsTime] desc) as rowNum 
from BAL_paymentsSwiftInfo where StoresNo='zq00000034') ranked where ranked.rowNum <= 1 order by ranked.CustomerCaseNo, ranked.PaymentsTime desc 
 
select * from (select * from test order by score desc) as a group by a.name; 

Thank you for reading, I hope it can help you, thank you for your support of this site!

You may also be interested in:
  • MySql grouping and randomly getting one piece of data from each group
  • Implement group by based on MySQL to get the latest data of each group
  • MySQL subqueries and grouped queries
  • MySQL grouping queries and aggregate functions
  • MySql Group By implements grouping of multiple fields
  • Detailed explanation of MySQL group sorting to find the top N
  • Mysql uses group by group sorting
  • Detailed explanation of MySQL data grouping

<<:  Methods and steps for Etcd distributed deployment based on Docker

>>:  Sample code for configuring nginx to support https

Recommend

How to add a pop-up bottom action button for element-ui's Select and Cascader

As shown in the figure below, it is a common desi...

Mysql database index interview questions (basic programmer skills)

Table of contents introduction Indexing principle...

How to control the startup order of docker compose services

summary Docker-compose can easily combine multipl...

Vue element implements table adding, deleting and modifying data

This article shares the specific code of vue elem...

Implementation of Nginx load balancing/SSL configuration

What is load balancing? When a domain name points...

Small paging design

Let our users choose whether to move forward or ba...

Steps to set up Windows Server 2016 AD server (picture and text)

Introduction: AD is the abbreviation of Active Di...

Various transformation effects of HTML web page switching

<META http-equiv="Page-Enter" CONTENT...

How to let https website send referrer https and http jump referrer

This article describes a proposal for a metadata ...

How to copy MySQL table

Table of contents 1.mysqldump Execution process: ...

jQuery realizes the picture following effect

This article shares the specific code of jQuery t...