【发布时间】:2021-01-16 15:18:12
【问题描述】:
我正在做一个练习 SQL 问题 Hacker Rank。这是网站https://www.hackerrank.com/challenges/challenges/problem。
所以,如果把下面的代码,它会给我正确的答案:
select h.hacker_id,h.name,count(c.challenge_id) num
from Hackers h, Challenges c
where h.hacker_id = c.hacker_id
group by h.hacker_id, h.name
having count(c.challenge_id) in
(8 ,9 ,10 ,14 ,15 ,16 ,18 ,19 ,20 ,21 ,22 ,23 ,24 ,25 ,
26 ,27 ,28 ,29 ,30 ,31 ,32 ,33 ,34 ,35 ,36 ,37 ,40 ,41 ,42 ,50)
order by num desc, h.hacker_id
但是数量
(8 ,9 ,10 ,14 ,15 ,16 ,18 ,19 ,20 ,21 ,22 ,23 ,24 ,25 ,
26 ,27 ,28 ,29 ,30 ,31 ,32 ,33 ,34 ,35 ,36 ,37 ,40 ,41 ,42 ,50)
实际上是由以下代码生成的:
select t1.num2 from
(select hacker_id id_1, count(challenge_id) num2 from challenges
group by hacker_id
order by num2 desc) t1
group by t1.num2
having count(t1.num2)=1 or count(t1.num2) = 12
如果您将数字替换为上面的代码作为子查询,例如:
select h.hacker_id,h.name,count(c.challenge_id) num
from Hackers h, Challenges c
where h.hacker_id = c.hacker_id
group by h.hacker_id, h.name
having count(c.challenge_id) in
(select t1.num2 from
(select hacker_id id_1, count(challenge_id) num2 from challenges
group by hacker_id
order by num2 desc) t1
group by t1.num2
having count(t1.num2)=1 or count(t1.num2) = 12)
它根本不会返回任何值。 谁能告诉我这是为什么?
【问题讨论】:
-
我觉得这个link可以帮到你。
-
hackerrank 的问题是什么?您能否添加针对此特定问题给出的示例数据?乍一看,第一个查询是正确的,因为您只是过滤了
HAVING中count()值的最终结果。主要问题是如何在不过滤HAVING的情况下获得最终的count()。 -
stackoverflow.com/questions/54857386/… 这是我找到的网站。
-
我之前做过这个挑战并得到了解决,但我不记得怎么解决的了。我会检查一下并提供一些信息