【问题标题】:Counter Example to the Following Solution?以下解决方案的反例?
【发布时间】:2018-08-30 18:07:53
【问题描述】:

我最近完成了一个编码挑战,提示如下:

一个黑客的总分是他们所有的最高分的总和 的挑战。编写查询以打印hacker_id、名称和 黑客总得分按得分降序排列。如果更多 比一个黑客获得相同的总分,然后将结果排序 上升的hacker_id。排除所有总分为 0 的黑客 你的结果。

下表包含比赛数据:

Hackers:hacker_id是黑客的id,name是名字 黑客。

Submissions:submission_id是提交的id,hacker_id 是提交的黑客的 id,challenge_id 是 提交所属挑战的id,得分为 提交的分数。

我的解决方案通过了测试用例,但我花了很多次迭代才到达那里。

我感觉可能存在使用我的解决方案无法通过的极端情况/特定输入,但我无法弄清楚。

有任何猜测或反例吗?

我的解决方案:

Select ID, Name, sum(maxscore) as tot From
(Select ID, Name, chal, Max(score) as maxscore From
(Select Submissions.hacker_id as ID, Hackers.name as Name, Submissions.score as score, Submissions.challenge_id as chal
From Submissions
    Inner Join Hackers on Submissions.hacker_id = Hackers.hacker_id
    Where Submissions.score <> 0)
Group by chal, ID, Name)
Group by ID, Name Order by tot desc, ID asc;

【问题讨论】:

  • 你的问题不清楚..有适当的数据样本..和预期的..结果
  • 您假设分数为非负数。这可能是合理的,但没有明确说明。
  • 欢迎来到stackoverflow,您的问题的质量将反映它的回答方式,请参考how to ask a good question 一个好的问题将清楚地显示您遇到的问题并包含错误消息或问题。还包括您使用过的代码以及尝试解决问题的任何尝试,包括您认为失败的地方。我们掌握的信息越多,我们就越有可能提供帮助。请保持问题简洁,一次只回答一个问题。

标签: sql


【解决方案1】:
Select a.hacker_id,a.name,x.sum_max
from Hackers a
inner join 
(SELECT hacker_id,sum(max_score) as sum_max from (
Select hacker_id,challenge_id,max(Score) as max_score
from submissions
group by hacker_id,challenge_id)b 
group by hacker_id
having sum_max>0)x on a.hacker_id=x.hacker_id
order by sum_max desc,hacker_id

【讨论】:

    【解决方案2】:

    这是我的

    select T.hacker_id, T.name , sum(T.max_score) sum_score from (
    Select h.hacker_id, name , challenge_id, max(score) max_score from Hackers h 
    inner join submissions s on h.hacker_id = s.hacker_id
    group by h.hacker_id, name , challenge_id) as T
    group by T.hacker_id, T.name
    having sum(T.max_score) > 0
    order by sum_score desc , T.hacker_id
    

    【讨论】:

      【解决方案3】:

      此 MySQL 代码成功运行了测试用例。

      select m.id, h.name, m.total from 
          (select x.hacker_id id, sum(x.max_score) total from
              (select h.hacker_id, s.challenge_id, max(s.score) as max_score from submissions as s 
              join hackers as h on h.hacker_id = s.hacker_id
              group by h.hacker_id, s.challenge_id) as x
          group by x.hacker_id
          having total <> 0)as m, 
      hackers as h
      where m.id = h.hacker_id
      order by m.total desc, m.id;
      
      

      enter image description here

      【讨论】:

        【解决方案4】:
        First try this query than vote:
        
        select h.hacker_id,h.name,sum(s.score) as scores from Hackers h 
        inner join 
        (select hacker_id,max(score) as score from Submissions group by hacker_id,challenge_id) s 
        on h.hacker_id=s.hacker_id 
        group by h.hacker_id,h.name having scores>0 
        order by scores desc,h.hacker_id;
        

        【讨论】:

          【解决方案5】:
          SELECT A, B, sum(C) FROM
          (SELECT h.hacker_id AS A, h.name AS B, max(s.score)AS C FROM
          Hackers h
          JOIN Submissions s ON s.hacker_id=h.hacker_id
          GROUP BY h.hacker_id,h.name, s.challenge_id) Sub
          GROUP BY A, B
          HAVING sum(C)>0
          ORDER BY sum(C) DESC, A ASC;
          

          【讨论】:

            【解决方案6】:

            我试过这个并和我一起工作
            选择 H.Hacker_id, h.Name, sum(x.Score) 来自黑客 h 内连接 (
            选择hacker_id、challenge_id、max(Score)作为Score 从提交 按hacker_id、challenge_id分组 ) X 在 H.Hacker_id = x.hacker_Id 按 H.Hacker_Id、h.Name 分组 总和(x.score)> 0 按 3 desc 排序,h.hacker_id

            【讨论】:

            • 您好,欢迎您。回答旧问题时,请在您的回答中说明您的回答如何改进现有答案。这也没有回答这个问题,即要求边缘情况,而不是代码。
            猜你喜欢
            • 1970-01-01
            • 2013-03-05
            • 1970-01-01
            • 1970-01-01
            • 2013-10-28
            • 1970-01-01
            • 2021-10-26
            • 1970-01-01
            • 2020-09-04
            相关资源
            最近更新 更多