这是表:用户
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个位置,所以第二个出现的位置将取代,在这种情况下,我们使用彼得.
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
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |