我使用MySQL和找到的人有這些表:(只顯示了重要的列)查詢與最高分
人
ID,主鍵
後
ID,主鑰匙
分,INT
參觀
ID,主鍵
PERSON_ID,是指人
POST_ID,是指發佈
我想找到的是人(前5名)與整體最高分?每個職位上的人數最多的人。
任何人都可以請指導我嗎?任何幫助是深深的折磨!
我使用MySQL和找到的人有這些表:(只顯示了重要的列)查詢與最高分
人
ID,主鍵
後
ID,主鑰匙
分,INT
參觀
ID,主鍵
PERSON_ID,是指人
POST_ID,是指發佈
我想找到的是人(前5名)與整體最高分?每個職位上的人數最多的人。
任何人都可以請指導我嗎?任何幫助是深深的折磨!
前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
每篇文章
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)
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;
你怎麼想處理關係?如同,如果你有兩個人並列第五名(或第一名)? – 2012-02-02 18:19:25