Search code examples
mysqlinner-join

Data from two tables filtered by a column


In MySQL, I have a myTab1 which has columns like userId, name, gender, birthMonth. Here userId is the primary key. There can be only 1 unique userId in the entire table.

I have another table myTab2 which has columns like userId, level, score. There is no primary key in this table and it is just for the transactions.

Example:

myTab1

userId name gender birthMonth
abc name1 Male January
xyz name2 Female March
mno name3 Male July

myTab2

userId level score
abc 1 10
abc 2 9
abc 3 11
abc 4 10
abc 5 23
xyz 1 11
xyz 2 10
mno 1 8

Now I need only the top 3 users with the highest level along with their name which is in myTab1 as below

userId name level score
abc name1 5 23
xyz name2 2 10
mno name3 1 8

Following is what I wrote but not sure how to get the result like above. I am not good at DB queries and looking for some help.

SELECT 
b.*, 
a.name 
FROM 
myTab1 AS b 
INNER JOIN myTab2 as a ON b.userId=a.userId 
ORDER BY level DESC 
limit 3

Solution

  • You can try this...

    SELECT
        t1.userId,
        t1.name,
        MAX(t2.level) AS level,
        MAX(t2.score) AS score
    FROM
        myTab1 t1
    JOIN
        myTab2 t2 ON t1.userId = t2.userId
    GROUP BY
        t1.userId, t1.name
    ORDER BY
        level DESC
    LIMIT 3;
    

    Output

    enter image description here