以下解决方案的反例?
Posted
技术标签:
【中文标题】以下解决方案的反例?【英文标题】: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;
【问题讨论】:
你的问题不清楚..有适当的数据样本..和预期的..结果 您假设分数为非负数。这可能是合理的,但没有明确说明。 欢迎来到***,您的问题的质量将反映它的回答方式,请参考how to ask a good question 一个好的问题将清楚地显示您遇到的问题并包含错误消息或问题。还包括您使用过的代码以及尝试解决问题的任何尝试,包括您认为失败的地方。我们掌握的信息越多,我们就越有可能提供帮助。请保持问题简洁,一次只回答一个问题。 【参考方案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
【讨论】:
您好,欢迎您。回答旧问题时,请在您的回答中说明您的回答如何改进现有答案。这也没有回答这个问题,即要求边缘情况,而不是代码。以上是关于以下解决方案的反例?的主要内容,如果未能解决你的问题,请参考以下文章