Значение этой строки: HAVING c2.hacker_id <> c.hacker.id? - PullRequest
0 голосов
/ 25 февраля 2019

Я работал над вопросом HackerRank SQL, "Задачи" .

Вот в чем проблема:

Джулия попросила своих учеников создать некоторые проблемы с кодированием.Напишите запрос, чтобы напечатать hacker_id, name и общее количество заданий, созданных каждым учеником.Сортируйте свои результаты по общему количеству испытаний в порядке убывания.Если более одного студента создали одинаковое количество заданий, отсортируйте результат по hacker_id.Если более одного ученика создали одинаковое количество заданий, а их число меньше максимального числа созданных заданий, исключите этих учеников из результата.

Этот вопрос поставил меня в тупик, и я искалонлайн, чтобы увидеть, как другие люди решили это, когда я столкнулся с этим Github здесь , который предложил действительно изящное решение.

SELECT c.hacker_id, 
       h.name, 
       COUNT(c.challenge_id) AS cnt 

FROM Hackers AS h 
   JOIN Challenges AS c ON h.hacker_id = c.hacker_id

GROUP BY c.hacker_id, h.name 
HAVING cnt = (SELECT COUNT(c1.challenge_id) 
              FROM Challenges AS c1 
              GROUP BY c1.hacker_id 
              ORDER BY COUNT(*) DESC 
              LIMIT 1) 
OR
       cnt NOT IN (SELECT COUNT(c2.challenge_id) 
       FROM Challenges AS c2 
       GROUP BY c2.hacker_id 
       HAVING c2.hacker_id <> c.hacker_id)

ORDER BY cnt DESC, c.hacker_id;

Я понимаю, как плакат гарантировал, что мытолько получить максимальное количество испытаний в первом условии ХАЙВИНГА, но что касается второй части, я не совсем понимаю.Я не уверен, почему работает второе условие запроса HAVING: HAVING c2.hacker_id <> c.hacker_id

Не всегда ли c2.hacker_id = c.hacker_id?

1 Ответ

0 голосов
/ 25 февраля 2019

если вы уравняете их (c2.hacker_id = c.hacker_id), результаты соотносятся с тем же hacker_id.при условии неравенства он рассчитывает не включая hacker_id сам.это означает подсчет количества вызовов, у которых hacker_id не равно hacker_id внешнего запроса, и исключение этих подсчетов из основного запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...