SQL SELECT 具有最高值的行,其中 problem_id 相同

SQL SELECT row with highest value where problem_id is the same

我正在做一个项目,我必须列出每个问题得票最高的解决方案。

每个问题都有两个解决方案,用户可以对每个问题的一个解决方案进行投票。这是我目前的数据库。

+----------+------------+---------+
|    id    | id_problem |  vote   |
+----------+------------+---------+
|    1     |     1      |    25   |
|    2     |     1      |    10   |
|    3     |     2      |    18   |
|    4     |     2      |    2    |
|    5     |     3      |    6    |
|    6     |     3      |    7    |
|    7     |     4      |    11   |
|    8     |     4      |    4    |
|    9     |     5      |    5    |
|    10    |     5      |    2    |
+----------+------------+---------+

我想得到这个结果: (每 id_problem 票数最高的行)

+----------+------------+---------+
|    id    | id_problem |  vote   |
+----------+------------+---------+
|    1     |     1      |    25   |
|    3     |     2      |    18   |
|    6     |     3      |    7    |
|    7     |     4      |    11   |
|    9     |     5      |    5    |
+----------+------------+---------+

您可以使用 group by 子句和 max 聚合函数来获得预期的结果,例如:

select id, id_problem, max(vote) as vote
from result
group by id_problem
order by id_problem

这里是SQL Fiddle

SELECT 
    id, 
    id_problem, 
    max(vote) 
from 
    tablename
group by 
    id_problem 
order by 
    id_problem ASC

max(vote)决定了更大的投票,但它聚合了结果,然后你需要按id_problem分组,然后升序排列。