jeudi 30 juin 2016

MySQL inner join coding Challenge

Julia asked her students to create some coding challenges. Write a query to print the hacker_id, name, and the total number of challenges created by each student. Sort your results by the total number of challenges in descending order. If more than one student created the same number of challenges, then sort the result by hacker_id. If more than one student created the same number of challenges and the count is less than the maximum number of challenges created, then exclude those students from the result.

Input Format

The following tables contain challenge data:

Hackers: The hacker_id is the id of the hacker, and name is the name of the hacker. Hacker table

Challenges: The challenge_id is the id of the challenge, and hacker_id is the id of the student who created the challenge.

Challenge table

1 commentaire:

  1. SELECT DISTINCT a.*
    FROM
    ( SELECT h.*
    , COUNT(c.challenge_id) challenge_count
    FROM hackers h
    JOIN challenges c
    ON c.hacker_id = h.hacker_id
    GROUP
    BY h.hacker_id
    ) a
    LEFT
    JOIN
    ( SELECT h.*
    , COUNT(c.challenge_id) challenge_count
    FROM hackers h
    JOIN challenges c
    ON c.hacker_id = h.hacker_id
    GROUP
    BY h.hacker_id
    ) b
    ON b.hacker_id <> a.hacker_id AND b.challenge_count = a.challenge_count
    LEFT
    JOIN
    ( SELECT h.*
    , COUNT(c.challenge_id) challenge_count
    FROM hackers h
    JOIN challenges c
    ON c.hacker_id = h.hacker_id
    GROUP
    BY h.hacker_id
    ) c
    ON c.challenge_count > a.challenge_count
    WHERE b.hacker_id IS NULL
    OR c.hacker_id IS NULL
    ORDER
    BY challenge_count DESC, hacker_id;

    RépondreSupprimer