[英]Display only top sum-up results using group by
我的表格為同一組用戶記錄了三個不同的分數(地點,公園,分區)。 用戶的總得分是“所有站點得分之和” +“所有公園得分之和” +“所有部門得分之和”。
代碼如下,我正在使用MySQL:
select sum(points)as points, user_name
from
(SELECT sum(site_point) as points, user_name from visits v join users u on
u.user_id = v.user_id group by user_name
union
select sum(park_point) as points , user_name from visits v join users u on
u.user_id = v.user_id group by user_name
union
select sum(division_point) as points , user_name from visits v join users u
on u.user_id = v.user_id group by user_name
) V group by user_name order by sum(points) DESC ;
我只想顯示得分在前5名的用戶及其得分。 十個用戶可能具有相同的最高分數。 我需要顯示所有這些。 感謝您的幫助。
我認為這是您想要的:
select user_name,
sum(site_point + park_point + division_point) as points
from visits v join
users u
on u.user_id = v.user_id
group by user_name
order by points desc
limit 5;
單一聚合可簡化計算。
您可能沒有意識到,但是在某些情況下union
返回不正確的結果。 Union
刪除重復項,因此,如果用戶的部分分數相同,則兩行將變為一。
編輯:
獲得前5名的分數有點棘手,但可能的是:
select user_name,
sum(site_point + park_point + division_point) as points
from visits v join
users u
on u.user_id = v.user_id
group by user_name
having points >= (select distinct points
from (select sum(site_point + park_point + division_point)
from visits v join
users u
on u.user_id = v.user_id
group by user_name
) vu
order by points desc
limit 1 offset 4
)
order by points desc
limit 5;
假設user_name
對於給定的ID是唯一的,則可以簡化一下:
having points >= (select distinct points
from (select sum(site_point + park_point + division_point) as points
from visits v
group by user_id
) vu
order by points desc
limit 1 offset 4
)
而且,如果您希望與前5名用戶匹配的任何人(如果有聯系,則返回多於5行),則可以更改select distinct
以在子查詢中進行select
。
使用LIMIT
命令。 更多信息在這里
因此,將其附加到您的SQL上將導致:
select sum(points)as points, user_name
from
(SELECT sum(site_point) as points, user_name from visits v join users u on
u.user_id = v.user_id group by user_name
union
select sum(park_point) as points , user_name from visits v join users u on
u.user_id = v.user_id group by user_name
union
select sum(division_point) as points , user_name from visits v join users u
on u.user_id = v.user_id group by user_name
) V group by user_name order by sum(points) DESC LIMIT 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.