2012-02-02 103 views
2

我使用MySQL和找到的人有這些表:(只顯示了重要的列)查詢與最高分


ID,主鍵


ID,主鑰匙
,INT

參觀
ID,主鍵
PERSON_ID,是指人
POST_ID,是指發佈

我想找到的是人(前5名)與整體最高分?每個職位上的人數最多的人。

任何人都可以請指導我嗎?任何幫助是深深的折磨!

+0

你怎麼想處理關係?如同,如果你有兩個人並列第五名(或第一名)? – 2012-02-02 18:19:25

回答

1

前5人的最高分總:

SELECT 
    p.id, 
    SUM(Post.points) AS total_points 
FROM 
    Person p 
    INNER JOIN Visit v 
     ON p.id = v.person_id 
    INNER JOIN Post 
     ON v.post_id = Post.id 
GROUP BY 
    p.id 
ORDER BY 
    SUM(Post.points) DESC 
LIMIT 5 

排名最高的前5名在一個崗位:

SELECT 
    p.id, 
    MAX(Post.points) AS best_post_points 
FROM 
    Person p 
    INNER JOIN Visit v 
     ON p.id = v.person_id 
    INNER JOIN Post 
     ON v.post_id = Post.id 
GROUP BY 
    p.id 
ORDER BY 
    MAX(Post.points) DESC 
LIMIT 5 

前5個帖子:

SELECT 
    p.id, 
    Post.points 
FROM 
    Person p 
    INNER JOIN Visit v 
     ON p.id = v.person_id 
    INNER JOIN Post 
     ON v.post_id = Post.id 
ORDER BY 
    Post.points DESC 
LIMIT 5 
0

每篇文章

SELECT id FROM Person where id in (SELECT person_id FROM Visit where post_id in (SELECT id FROM Post order by points DESC limit 5))

整體(不知道是否會工作,未測試)

SELECT id FROM Person where id in (SELECT distinct(person_id) FROM Visit where post_id in (SELECT id FROM Post order by points DESC limit 5) GROUP BY person_id)

0
SELECT * 
FROM 
(
SELECT P.id , SUM(PP.points) 
FROM PERSON P JOIN VISIT V ON (V.person_id = P.id) 
JOIN POST PP JOIN ON (PP.id = V.post_id) 
GROUP BY P.id 
ORDER BY PP.points DESC 
) 
LIMIT 5; 

SELECT * 
FROM 
(
    SELECT P.id , COUNT(*) NUM_OF_POST 
    FROM PERSON P JOIN VISIT V ON (V.person_id = P.id) 
    JOIN POST PP JOIN ON (PP.id = V.post_id) 
    GROUP BY P.id 
    ORDER BY NUM_OF_POST DESC 
) 
LIMIT 5;