以下解决方案的反例?

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

【讨论】:

您好,欢迎您。回答旧问题时,请在您的回答中说明您的回答如何改进现有答案。这也没有回答这个问题,即要求边缘情况,而不是代码。

以上是关于以下解决方案的反例?的主要内容,如果未能解决你的问题,请参考以下文章

项目实战典型案例6——没有复用思想

sdut3562-求字典序最小的最短路 按顶点排序后spfa的反例

项目实战典型案例07.在线人员列表逻辑混乱反例

如何解决延迟作业中的反序列化错误?

教学典型案例06.没有复用思想

dReal SMT 求解器反例