Ошибка при получении значения из таблицы базы данных - PullRequest
0 голосов
/ 27 сентября 2018

Я перебрал людей, которые набрали полный балл за вызов разного уровня сложности.Тем не менее, вопрос гласит, что запрос hacker_id и имя людей, которые получили полный балл более одного раза.У меня проблема с COUNT.Я пытался посчитать частоту появления имени в таблице, но это мне не позволило.Я подозреваю, что с синтаксисом GROUPBY что-то не так.Кто-нибудь может мне помочь?

Предыдущий код

Select s.challenge_id,s.hacker_id,h.name,s.submission_id,c.difficulty_level,s.score
FROM (((Hackers AS h JOIN Submission AS s ON h.hacker_id=s.hacker_id)JOIN Challenges AS c ON c.challenge_id=s.challenge_id)JOIN Difficulty AS d ON d.difficulty_level=c.difficulty_level)
WHERE c.difficulty_level=d.difficulty_level and s.score=d.score

Результат

 challenge_id | hacker_id | name |submission_id |difficulty_level |score

    71055        86870      Todd     94613                 2    30
    66730        90411      Joe      97397                 6    100
    71055        90411      Joe      97431                 2    30

Задача

 Select g.hacker_id,g.name,COUNT(g.name)
 FROM (Select s.challenge_id,s.hacker_id,h.name,s.submission_id,c.difficulty_level,s.score
 FROM (((Hackers AS h JOIN Submission AS s ON h.hacker_id=s.hacker_id)JOIN Challenges AS c ON c.challenge_id=s.challenge_id)JOIN Difficulty AS d ON d.difficulty_level=c.difficulty_level)
 WHERE c.difficulty_level=d.difficulty_level and s.score=d.score) AS g
 WHERE COUNT(g.name)>1
 GROUBY g.hacker_id,g.name;

1 Ответ

0 голосов
/ 27 сентября 2018

Если вам нужно COUNT каждого имени, которое появилось более одного раза в вашем первом запросе, тогда вы можете использовать следующее

SELECT hacker_id, name, COUNT(name)
FROM
(
Select s.challenge_id,s.hacker_id,h.name,s.submission_id,c.difficulty_level,s.score
FROM (((Hackers AS h JOIN Submission AS s ON h.hacker_id=s.hacker_id)JOIN Challenges AS c ON c.challenge_id=s.challenge_id)JOIN Difficulty AS d ON d.difficulty_level=c.difficulty_level)
WHERE c.difficulty_level=d.difficulty_level and s.score=d.score
) AS T
GROUP BY hacker_id, name
HAVING COUNT(name) > 1

HAVING, используемое для фильтрации агрегированного результата

...