如何编写这个SQL语句?

DNB*_*ims 2 mysql sql

这是表:用户

Name:  Subject:
Peter   Math
Mary    Chinese
Mary    Computer
Mary    Hist
Mary    PE
Mary    English
Peter   Art
Chris   English
Chris   Computer
Peter   Computer
Paul    Math
Run Code Online (Sandbox Code Playgroud)

我希望顶部出现在名称中,并返回前4个结果应该是主题名称.例如,在这种情况下,top出现名称是Mary,并且基于主题,中文,计算机,英语的顺序,所以我希望得到结果:

Mary    Chinese
Mary    Computer
Mary    English
Mary    Hist
Run Code Online (Sandbox Code Playgroud)

如果Mary不是最能显示结果,那么第二个人就会跟随,比如说,表格会是这样的:

Name:  Subject:
Peter   Math
Mary    Chinese
Mary    Computer
Mary    Hist
Peter   Art
Chris   English
Chris   Computer
Peter   Computer
Paul    Math
Run Code Online (Sandbox Code Playgroud)

结果将是,

Mary    Chinese
Mary    Computer
Mary    Hist
Peter   Art
Run Code Online (Sandbox Code Playgroud)

因为玛丽是最出现的,所以玛丽会回来,但玛丽不足以填补4个位置,所以第二个出现的位置将取代,在这种情况下,我们使用彼得.

she*_*sek 5

SELECT user.name, user.subject
FROM user
INNER JOIN (
    SELECT name, COUNT(1) AS occurrences
    FROM user
    GROUP BY name
  ) AS user_occurrences
  ON user.name = user_occurrences.name
ORDER BY user_occurrences.occurrences DESC, user.name ASC, user.subject ASC
LIMIT 4

编辑这可能会更好,具体取决于您使用的RDBMS和数据集的大小.尝试两者并进行比较.

SELECT user.name, user.subject
FROM user
INNER JOIN user AS user_occurrences
  ON user.name = user_occurrences.name
GROUP BY user.name --, user.subject Second GROUP BY not needed on MySQL, but it should logically be there
ORDER BY COUNT(user_occurrences.subject) DESC, user.name ASC, user.subject ASC
LIMIT 4