【问题标题】:SQL SELECT row with highest value where problem_id is the sameSQL SELECT 具有最高值的行,其中问题 ID 相同
【发布时间】:2016-03-25 00:06:01
【问题描述】:

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

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

+----------+------------+---------+
|    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    |
+----------+------------+---------+

【问题讨论】:

    标签: php mysql sql dao


    【解决方案1】:
    SELECT 
        id, 
        id_problem, 
        max(vote) 
    from 
        tablename
    group by 
        id_problem 
    order by 
        id_problem ASC
    

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

    【讨论】:

      【解决方案2】:

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

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

      这里是 SQL Fiddle

      【讨论】:

      • 我不确定他是否也想要 id,因为这是 PK。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      相关资源
      最近更新 更多