【问题标题】:I cannot get any values from a select subquery我无法从选择子查询中获取任何值
【发布时间】: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 的问题是什么?您能否添加针对此特定问题给出的示例数据?乍一看,第一个查询是正确的,因为您只是过滤了HAVINGcount() 值的最终结果。主要问题是如何在不过滤HAVING 的情况下获得最终的count()
  • stackoverflow.com/questions/54857386/… 这是我找到的网站。
  • 我之前做过这个挑战并得到了解决,但我不记得怎么解决的了。我会检查一下并提供一些信息

标签: mysql subquery


【解决方案1】:

我发现如果你改变了

...
having count(c.challenge_id) in
(select t1.num2  from ...

...
having count(c.challenge_id) in
(select GROUP_CONCAT(t1.num2) from ...

...
having num in
(select t1.num2 from ...

/*with "having", you're allowed to use aliases that you've assigned in "SELECT". 
In your case, you've already assigned "count(c.challenge_id) num" so you can use "num" in HAVING.*/

这是我第一次遇到这样的事情,我还在寻找是否有任何关于这种行为的文档。我不确定是否有。

【讨论】:

    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 2019-04-04
    相关资源
    最近更新 更多