There is a requirement for grouping and then sorting in a recent project. Made for a long time, after the min big (background brother) guidance, finally made out, share to everyone (demo).
One example,
Student Information Sheet
For example, Bob’s highest score in Chinese was 123
SQL:
[size=1em]
[size=1em]
?
?
[size=1em]1
|
[size=1em][size=1em]select *from t_test group by name, type order by score desc; |
Results:
[size=1em]
[size=1em]
?
?
[size=1em]1
[size=1em]2
[size=1em]3
|
[size=1em][size=1em] [size=1em] [size=1em] [size=1em] [size=1em] [size=1em] [size=1em] [size=1em] [size=1em] [size=1em] [size=1em] [size=1em] |
4. Think differently and use Max to find the highest score
SQL:
[size=1em]
[size=1em]
?
?
[size=1em]1
|
[size=1em][size=1em]select *, max(score) as max_score from t_test group by name, type; |
Results:
5. Then join the main table with right JOIN to find the full information
sql:
[size=1em]
[size=1em]
?
?
[size=1em]1
[size=1em]2
[size=1em]3
|
[size=1em][size=1em]select a.* from t_test as a right join [size=1em](select name, type, max(score) as max_score from t_test group by name, type) as b on a.name = b.name and a.type = b.type and a.score = b.max_score [size=1em]order by b.name, b.type; |
Results:
Second, the summary
Through Max (), min() can realize the function of sorting before grouping; Full information can be obtained with right Join; Select (name, type) from group by; The same can be achieved: the lowest score of the student information and in addition to the highest score other information (difference set), welcome to exchange learning.