sql问题涉及的挑战数已解决

m4pnthwp  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(308)

下面的问题是基于hackerrank的问题。其内容如下:
茱莉亚要求她的学生创造一些编码挑战。编写一个查询,打印黑客id、姓名和每个学生创建的挑战总数。按挑战总数降序排列结果。如果多个学生创建了相同数量的挑战,则按黑客id对结果进行排序。如果多个学生创建了相同数量的挑战,且计数小于创建的最大挑战数,则将这些学生排除在结果之外。
在质询中,我提交了以下内容,但由于某种原因出现了语法错误。有什么问题?

select h.hacker_id
     , h.name
     , count(c.challenge_id) count1 
  from hackers h 
  join challenges c
    on c.hacker_id = h.hacker_id 
 where h.hacker_id not in  
          (select hh.hacker_id 
             from hackers hh 
             join challenges cc
               on cc.hacker_id = hh.hacker_id 
             join 
                ( select hhh.hacker_id
                       , count(ccc.challenge_id) count2 
                    from hackers hhh 
                    join challenges ccc
                      on ccc.hacker_id = hhh.hacker_id 
                   group 
                      by hhh.hacker_id 
                  having count(ccc.challenge_id) < 
                              (select max(count2) 
                                 from 
                                    ( select count(cc.challenge_id) count2 
                                        from hackers hh 
                                        join challenges cc
                                          on hh.hacker_id = cc.hacker_id
                                    ) a
                               ) b
                ) t 
               on t.hacker_id <> hh.hacker_id 
          ) c 
      group 
         by h.hacker_id
          , h.name
      order 
         by count(c.challenge_id)
          , h.hacker_id desc
c90pui9n

c90pui9n1#

我不能评论以下内容的有效性,但它至少在语法上是有效的。。。

select c.hacker_id
     , h.name 
     , count(c.hacker_id) c_count
  from hackers h
  join challenges c 
    on c.hacker_id = h.hacker_id
 group 
    by c.hacker_id
     , h.name
having c_count = 
   ( SELECT MAX(temp1.cnt) 
       from 
          ( SELECT COUNT(hacker_id) cnt
              from challenges
             group 
                by hacker_id
          ) temp1
    ) 
    or c_count in 
        (select t.cnt
           from 
              ( select count(*) cnt 
                  from challenges
                 group 
                    by hacker_id
              ) t
          group 
             by t.cnt
         having count(t.cnt) = 1)
          order 
             by c_count DESC
              , c.hacker_id

相关问题